vector的相关误解

来源:互联网 发布:孤岛惊魂3低配优化 编辑:程序博客网 时间:2024/04/24 16:51

最近做东西要用到vector,之前没怎么用过,对其中的一些方法产生了一些误解,现在总结一下,希望对别人能有帮助。

reserve()是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此需要用push_back()/insert()函数插入新元素才能引用。

resize()是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了。若容器中已有元素,使用resize()时需要调用clear()。

resize(),clear(),erase()等都只改变容器的size,并不释放内存。

例1:

vector<int> vec1,vec2;vec1.resize(10);     //申请了空间,也创建了对象(默认构造函数)vec2.reserve(10);    //申请了空间,但没有创建对象for(int i=0;i<10;i++){    vec1[i]=i;       //没错    vec2[i]=i;       //出错}

例2:

vector<int> vec1,vec2;vec1.resize(10);vec1.push_back(1);   //vec1[0]~vec1[9]为一个很大的负数,vec1[10]=1vec2.reserve(10);vec2.push_back(1)    //vec2[0]=1;

例3:

vector<int> vec;vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.resize(2,10);        //vec.size()=2,但vec[0]~vec[2]中仍存放1~3,并没有变成10vec.clear();vec.resize(2,10);        //vec.size()=2,vec[0]~vec[1]中存放10







原创粉丝点击