C++之vector容器初学(二)——插入和删除

    xiaoxiao2021-03-26  25

    插入操作:

    理论知识

    ² vector.insert(pos,elem);   //pos位置插入一个elem元素的拷贝,返回新数据的位置。

    ² vector.insert(pos,n,elem);   //pos位置插入nelem数据,无返回值。

    ² vector.insert(pos,beg,end);   //pos位置插入[beg,end)区间的数据,无返回值 

    简单案例

    vector<int> vecA;

    vector<int> vecB;

     

    vecA.push_back(1);

    vecA.push_back(3);

    vecA.push_back(5);

    vecA.push_back(7);

    vecA.push_back(9);

     

    vecB.push_back(2);

    vecB.push_back(4);

    vecB.push_back(6);

    vecB.push_back(8);

    vecA.insert(vecA.begin(), 11); //{11, 1, 3, 5, 7, 9}

    vecA.insert(vecA.begin()+1,2,33); //{11,33,33,1,3,5,7,9}

    vecA.insert(vecA.begin() , vecB.begin() , vecB.end() ); //{2,4,6,8,11,33,33,1,3,5,7,9}

    测试代码:

    #include <iostream> using namespace std; #include "vector" void printV(vector<int> &v) { for (int i = 0; i < v.size();i++) { cout <<v[i]<< " "; } cout << endl; } //插入操作 void main1() { vector<int> v1; v1.insert(v1.begin(),1);//在开始位置插入元素1 printV(v1); v1.insert(v1.begin(),2,33);//在开始位置插入两个33 printV(v1); v1.insert(v1.begin(),v1.begin(),v1.end());//在开始位置插入整个区间元素 printV(v1); } int main() { cout << "插入操作:" << endl; main1(); return 0; }

    vector的删除

    理论知识

    ² vector.clear(); //移除容器的所有数据

    ² vec.erase(beg,end);  //删除[beg,end)区间的数据,返回下一个数据的位置。

    ² vec.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。

    简单案例:

    删除区间内的元素

    vecInt是用vector<int>声明的容器,现已包含按顺序的1,3,5,6,9元素。

    vector<int>::iterator itBegin=vecInt.begin()+1;

    vector<int>::iterator itEnd=vecInt.begin()+2;

    vecInt.erase(itBegin,itEnd);

    //此时容器vecInt包含按顺序的1,6,9三个元素。

     

    假设 vecInt 包含1,3,2,3,3,3,4,3,5,3删除容器中等于3的元素

    for(vector<int>::iterator it=vecInt.being(); it!=vecInt.end(); )    //小括号里不需写  ++it

    {

       if(*it == 3)

       {

            it  =  vecInt.erase(it);       //以迭代器为参数,删除元素3,并把数据删除后的下一个元素位置返回给迭代器。

             //此时,不执行  ++it;  

       }

       else

       {

           ++it;

       }

    }

     

    //删除vecInt的所有元素

    vecInt.clear(); //容器为空

    测试代码:

    #include <iostream> using namespace std; #include "vector" void printV(vector<int> &v) { for (int i = 0; i < v.size();i++) { cout <<v[i]<< " "; } cout << endl; } //删除操作 void main2() { vector<int> v1(10); for (int i = 0; i < v1.size(); i++) { v1[i] = i + 1; } printV(v1); v1.erase(v1.begin(),v1.begin()+4);//区间删除 printV(v1); v1.erase(v1.begin());//头部删除 printV(v1); v1[0] = 23; v1[1] = 22; printV(v1); for (vector<int>::iterator it = v1.begin(); it != v1.end();)//删除容器里等于8的元素 { if (*it == 8) { it = v1.erase(it); } else it++; } printV(v1); } int main() { cout << "删除操作:" << endl; main2(); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-664009.html

    最新回复(0)