STL之vector常用方法 二维vector 取vector数组指针

    xiaoxiao2026-08-30  14

    一.使用包含

    #include <vector> using namespace std;

    二.声明

    1、一维数组:

    vector<int> a; vector<int> a(100, 0); //声明长度为100值为0的vector vector<int> a(b.begin()+1, b.end()-2);

    2、动态创建m*n的二维vector:

    方法一:

    vector<vector<int> > arr; (注意<int>后有空格或者使用typedef定义) arr.resize(m); for(int i=0;i<m;i++) arr[i].resize(n);

    方法二:

    vector<vector <int> > arr(m,vector<int>(n,0)); //初始化为0,m*n大小

    C++版:

    int **p=new int*[m]; for(int i=0; i<m; i++) p[i]=new int[n];

    3、初始化:

    int v1[10] = {0,0,0,0,0,0}; vector<int> v(&v1[0],&v1[6]); copy(v.begin(), &v1[0], &v1[6]);

    三.增

    push_back() 在数组的最后添加一个数据,可以使单个数据或者数组。如果在声明时没有定义长度,则直接用下表赋值会出错需用push_back。

    b.push_back(10);

    insert(pos,elem) 在pos位置插入一个elem拷贝

    b.insert(a.begin(),10); //在开头位置插入,stl插入机制一般是在当前位置的前面插入 b.insert(a.end(),10); //在结尾位置插入

    assign(),对vector进行批量赋值

    v1 = 10 20 30 40 50 v2 = 1 2 v2 = v1 // v2 = 10 20 30 40 50 v2.assign(v1.begin(), v1.end()); // v2 = 10 20 30 40 50 v3.assign(3, 3) ; // v3 = 3 3 3

    emplace 插入值,类似于insert

    std::vector<int> myvector = {10,20,30}; auto it = myvector.emplace ( myvector.begin()+1, 100 ); // 在1位置插入100 myvector.emplace ( it, 200 ); //在100位置插入200 myvector.emplace ( myvector.end(), 300 ); // 在结尾插入300 结果 :myvector contains: 10 200 100 20 30 300

    emplace_back (100) 类似于push_back()

    四.删

    pop_back() 去掉数组的最后一个数据

    myvector.push_back (100); myvector.push_back (200); while (!myvector.empty()) { sum+=myvector.back(); myvector.pop_back(); }

    erase() 删除指针指向的数据项,iterator clear() 清空当前的vector

    五.改

    insert(pos,elem) 在pos位置插入一个elem拷贝

    b.insert(a.begin(),10); //在开头位置插入,stl插入机制一般是在当前位置的前面插入 b.insert(b.end(),b.begin(),b.end()); //在结尾位置插入vector b

    六.查

    a[5] at() 得到index位置的数据 begin() 得到数组头的指针 end() 得到数组的最后一个单元+1的指针 rbegin() 将vector反转后的开始指针返回 rend() 将vector反转后的结束指针返回

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

    myvector.push_back(78); myvector.push_back(16); // now front equals 78, and back 16 myvector.front() -= myvector.back();

    max_size() 得到vector最大可以是多大 capacity() 当前vector分配的大小 size() 当前使用数据的大小 empty() 判断vector是否为空

    vector<int>::iterator it = find( li.begin( ), li.end( ), c ); //遍历查找c if(iter != vec.end()){} else{} 如果vector中保存自定义类型structclass,需要自定义查找函数: class DemoStruct {   string gpcode;   bool operator == (const DemoStruct & obj) const //重载 “==” 操作符,函数最后的 const 别忘了,否则会报错。   {     return gpcode == obj.gpcode;   } }; vector<DemoStruct>::iterator iter; iter = find(vec_struct.begin(), vec_struct.end(), tmpdemo);

    七.遍历

    for(vector<datatype>::iterator it=a.begin(); it!=a.end(); it++) cout<<*it; for(int i=0; i<a.size; i++) cout<<a[i];

    八、其他

    取vector的数组类型指针:

    //vector第一个元素的地址,注意如果vector长度为0,那么不会得到,需要判断非空 if(!v.empty()) { int *p = &v[0]; } //利用vector的begin()迭代指针取值后再取地址 it = &*nums1.begin(); memcpy(merge,it,sizeof(int)*m);
    转载请注明原文地址: https://ju.6miu.com/read-1311735.html
    最新回复(0)