STL Vector整理

来源:互联网 发布:无印良品水乳 知乎 编辑:程序博客网 时间:2024/06/06 18:15
/**vector容器*//*2015.05.25  23:06 第一次整理*//*2015.05.26  14:17 第二次整理*/#include <iostream>#include <cstdio>#include <vector>#include <cstring>using namespace std;typedef struct Student{    int ID;    string name;}struA;int main(){//构造    int nSize = 4;    int i;    const int  &t = 9;//整型变量也行    vector <int> vecIntA(nSize,t);//元素个数为4且每个元素都为9    vector <struA> vecStruA(nSize);    vector <int> vecIntB(vecIntA);//vecIntA复制到vecIntB(深复制?)    vector <int> vecIntC;//创建一个空的vector,加括号与不加括号的区别?    int arr[] = {1,2,3,4,5};    vector <int> vecIntD(arr,arr + 4);//这个函数只能用于构造容器,前闭后开,5没有复制进去    /**for(int i = 0;i < 5;i++)//容器中只有四个元素        cout << vecIntD[i] << endl;*///定位、遍历    int n = vecIntD.at(2);//返回位置为2的元素的引用    /**cout << "value:" << n << endl;//输出3*/    n = vecIntD.front();//返回首元素的引用    /**cout << "front value: "<< n << endl;//输出1*/    n = vecIntD.back();//返回尾元素的引用    /**cout << "back value:" << n << endl;//输出4*/    /*迭代器的使用同MAP*/    /*除迭代器外,还可用下标像数组一样遍历*////大小    int Size;    Size = vecIntA.size();    /*cout << "size:" << Size <<endl;*/    Size = vecIntA.capacity();//返回当前vector能容纳的最大元素个数    /**cout << "capacity:" << Size << endl;//输出4*/    Size = vecIntA.max_size();//返回最大可允许的元素个数    /*cout << "max_size:" << Size << endl;*///删除,清空,判空    vector <int>::iterator vecIte;    for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)    {        vecIntA.erase(vecIte);//删除迭代器指向元素    }    /**cout << vecIntA.size() << endl;//输出2,会剩余两个元素,删除元素后因为会重置begin()位置,所以迭代器位置会变化,所以删不干净*/    /*for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)    {        cout << *vecIte << endl;    }*/    vecIntA.erase(vecIntA.begin(),vecIntA.begin() + 1);//删除第1个到第2个之间的元素,前闭后开,所以第二个没有删除    /**for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)    {        cout << *vecIte << endl;    }//输出一个9*/    vecIntA.pop_back();//删除最后一个元素    if(vecIntA.empty())    {        /*cout << "empty!" << endl;*/    }    else    {        /*cout << "not empty!" << endl;*/    }    /**for(vecIte = vecIntB.begin();vecIte != vecIntB.end();++vecIte)    {        cout << *vecIte << endl;    }//有元素输出,所以是深复制*/    vecIntB.clear();    vecIntC.clear();    /**if(vecIntC.empty())    {        cout << "empty" << endl;    }*/    vecIntD.clear();    vecStruA.clear();///插入    vecIntA.push_back(1);    vecIntA.push_back(2);    vecIntA.push_back(3);    vecIntA.push_back(4);//向尾部插入元素    /*for(i = 0;i < 4;i++)    {        cout << vecIntA.at(i) << endl;    }*/    vecIte = vecIntA.begin() + 2;    const int &m = 6;    vecIntA.insert(vecIte,m);//向迭代器指向的元素前插入元素m    /*for(i = 0;i < vecIntA.size();i++)    {        cout << vecIntA[i]<< endl;    }//1,2,6,3,4*/    n = 3;    vecIte = vecIntA.begin() + 1;//插入元素后迭代器必须要更新?    vecIntA.insert(vecIte,n,m);//向迭代器指向的元素前插入n个相同的元素m    /**for(i = 0;i < vecIntA.size();i++)    {        cout << vecIntA[i]<< endl;    }//1,6,6,6,2,6,3,4*/    vecIntB.push_back(5);    vecIntB.push_back(7);    vector <int>::const_iterator first,last;    first = vecIntA.begin() + 1;    last = vecIntA.end();    vecIntB.insert(vecIntB.begin(),first,last);    //在迭代器所指向的位置请前插入同类型向量【first,last)之间的数据,前闭后开区间,last元素不插入,注意后面两个形参为常迭代器    /**for(i = 0;i < vecIntB.size();i++)    {        cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;    }*////其他函数    vecIntB.assign(first,last);//向量中[first,last)中元素设置成当前向量元素,类似于copy函数    for(i = 0;i <vecIntB.size();i++)    {        cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;    }    vecIntA.assign(4,100);//设置4个元素的值为100    /**for(i = 0;i <vecIntA.size();i++)    {        cout << "vecIntA[" << i << "]:" << vecIntA[i] << endl;    }//输出100,100,100,100*/    vecIntB.swap(vecIntA);//交换两个同类型向量的数据    /**for(i = 0;i <vecIntB.size();i++)    {        cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;    }*/    return 0;}


0 0
原创粉丝点击