Detailed usage of vector in C++

Table of contents

Detailed usage of vector in C++

1. Introduction to vector

2. Storage type

3. Function

4. Two methods of vector two-dimensional array

5. Usage of find() in vector

6. Access to vector

7. The insert() function in vector adds element operations

8. The erase() function in vector deletes elements.


1. Introduction to vector

Header file: #include <vector>

Vector is a sequential container that encapsulates a dynamically sized array.

Like any other type of container, it can store various types of objects.

You can simply think of a vector as a dynamic array that can store any type.

2. Storage type

vector<类型>标识符
vector<类型>标识符(最大容量)
vector<类型>标识符(最大容量,初始所有值)
 
int i[5]={1,2,3,4,5}
vector<类型>vi(i,i+2);//得到i索引值为3以后的值
 
vector<vector<int>>v; 二维向量//这里最外的<>要有空格。否则在比较旧的编译器下无法通过

 

3. Function

push_back()  //在数组的最后添加一个数据
 
pop_back() //去掉数组的最后一个数据

at()  //得到编号位置的数据

begin() //得到数组头的指针

end() //得到数组的最后一个单元+1的指针
  
find()  //判断元素是否存在

front() //得到数组头的引用

back() //得到数组的最后一个单元的引用

max_size() //得到vector最大可以是多大

capacity() //当前vector分配的大小

size() //当前使用数据的大小

capacity(); //返回a在内存中总共可以容纳的元素个数

a.reserve(100); //改变当前vecotr所分配空间的大小将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100

a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值默认为0

a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,增加的元素其值为2

erase() //删除指针指向的数据项

clear() //清空当前的vector

rbegin() //将vector反转后的开始指针返回(其实就是原来的end-1)

rend() //将vector反转构的结束指针返回(其实就是原来的begin-1)

empty() //判断vector是否为空

swap() //与另一个vector交换数据
a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换

reverse(obj.begin(),obj.end());反向迭代器,实现元素对调

 

4. Two methods of vector two-dimensional array

The first:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int N=5, M=6;
    vector<vector<int>> obj(N); //定义二维动态数组大小5行
    for(int i =0; i< obj.size(); i++)//动态二维数组为5行6列,值全为0
    {
        obj[i].resize(M);
    }
 
    for(int i=0; i< obj.size(); i++)//输出二维动态数组
    {
        for(int j=0;j<obj[i].size();j++)
        {
            cout<<obj[i][j]<<" ";
        }
        cout<<"\n";
    }
    return 0;
}

 Second type:

#include <bits/stdc++.h>
 using namespace std;
 int main()
 {
     int N=5, M=6;
     vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列
  
     for(int i=0; i< obj.size(); i++)//输出二维动态数组
     {
         for(int j=0;j<obj[i].size();j++)
         {
             cout<<obj[i][j]<<" ";
         }
         cout<<"\n";
     }
     return 0;
 }

 

5. Usage of find() in vector

find(数组的头地址, 数组的尾地址, 要找的数)
 
find(nums.begin(), nums.end(), target)

//返回的是target第一次出现的地址
//如果没有找到返回尾地址nums.end()
Code: 
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using std::vector;
using std::cout;
using std::endl;
int main() {
    vector<int> nums = {2,7,8,8,9};
    int target = 8;
    vector<int>::iterator loc = find(nums.begin(), nums.end(), target);

    if (loc == nums.end()) {
        cout << "数组中没有" << target << endl;
    }
    else {
        cout << "数组中有" << target << endl;
        cout << "并且, 它的第一次出现的位置为:" << loc - nums.begin() << endl;
    }
}

 

 

6. Access to vector

#include <bits/stdc++.h>
using namespace std;
int main()
{
    //顺序访问
    vector<int>obj;
    for(int i=0;i<10;i++)
    {
        obj.push_back(i);//存储数据
    }
    
    //方法一数组访问
    cout<<"直接利用数组:";
    for(int i=0;i<10;i++)
    {
        cout<<obj[i]<<" ";
    }
    cout<<endl;
    
  
    //方法二,使用迭代器将容器中数据输出
    cout<<"利用迭代器:" ;
    vector<int>::iterator it;
    //声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
    for(it=obj.begin();it!=obj.end();it++)
    {
        cout<<*it<<" ";
    }
  
    return 0;
}

 

7. The insert() function in vector adds element operations

Use push_back() method

push_back()  //往vector末尾插入一个元素

//使用push_back()方式
vector<int> vA;
vA.push_back(1); //vA中push一个1  (vA={1})  

Insert elements using insert() method 

insert()  //往vector任意位置插入一个元素,指定位置或者指定区间进行插入,
 //第一个参数是个迭代器,第二个参数是元素。返回值是指向新元素的迭代器

vector<int> vA;
vector<int>::iterator it;

//指定位置插入
//iterator insert(const_iterator _Where, const _Ty& _Val)
//第一个参数是个迭代器位置,第二个参数是元素
it = vA.insert(vA.begin(),2); //往begin()之前插入一个int元素2 (vA={2,1}) 此时*it=2

  
//指定位置插入
//void insert(const_iterator _Where, size_type _Count, const _Ty& _Val) 
//第一个参数是个迭代器位置,第二个参数是要插入的元素个数,第三个参数是元素值
it = vA.insert(vA.end(),2,3);//往end()之前插入2个int元素3 (vA={2,1,3,3}) 此时*it=3


//指定区间插入
//void insert(const_iterator _Where, _Iter _First, _Iter _Last) 
vector<int> vB(3,6);  //vector<类型>标识符(最大容量,初始所有值)
it = vA.insert(vA.end(),vB.begin(),vB.end()); //把vB中所有元素插入到vA的end()之前 (vA={2,1,3,3,6,6,6})
//此时*it=6,指向最后一个元素值为6的元素位置



//删除元素操作:
 
pop_back()  从vector末尾删除一个元素

erase()  从vector任意位置删除一个元素,指定位置或者指定区间进行删除,第一个参数都是个迭代器。返回值是指向删除后的下一个元素的迭代器

 clear()   清除vector中所有元素, size=0, 不会改变原有capacity值

 

 

8. The erase() function in vector deletes elements.

pop_back()  //从vector末尾删除一个元素
  
erase()  //从vector任意位置删除一个元素
//指定位置或者指定区间进行删除,第一个参数都是个迭代器。 方法与insert()相同
//返回值是指向删除后的下一个元素的迭代器
  
  
clear()   //清除vector中所有元素, size=0, 不会改变原有capacity值

Code example:

#include <string.h>
#include <vector>
#include <iostream>
using namespace std;
 
int main()
{
    vector<int>obj;//创建一个向量存储容器 int
    for(int i=0;i<10;i++) // push_back(elem)在数组最后添加数据
    {
        obj.push_back(i);
        cout<<obj[i]<<",";
    }
 
    for(int i=0;i<5;i++)//去掉数组最后一个数据
        obj.pop_back();

    cout<<"\n"<<endl;
 
    for(int i=0;i<obj.size();i++)//size()容器中实际数据个数
        cout<<obj[i]<<",";
    
    
    /*
     分为升序和降序两排序方式:

     vector<int>v;
      
     sort(v.begin(), v.end(),less<int>());//升序
      
     sort(v.begin(), v.end(),greater<int>());//降序
     */
 
    //sort(obj.begin(),obj.end());//从小到大
    //reverse(obj.begin(),obj.end());反向迭代器,实现元素对调
    //obj.clear();//清除容器中所以数据
    
    return 0;
}

 

 

 

Guess you like

Origin blog.csdn.net/weixin_63246738/article/details/131763053