vector容器易错知识点集锦

来源:互联网 发布:java socket 长链接 编辑:程序博客网 时间:2024/06/05 05:09

关于vector容器的基本知识点很多很杂,这里我将着重介绍vector容器的易错且重要的知识点(本篇博客适合初学者查看,能迅速了解全面理解vector容器使用细则及注意点)
1、vector容器下标操作不会像数组一样添加元素
代码讲解:*vector<int> ivec;
for(vector<int> :: size_type ix=0; ix!=10;++ix){
ivec[ix]=ix;}*
类似上面一段代码试图在ivec中插入0-910个元素,其实不然,原因是必须是已存在的元素的才能用下标操作符进行索引,通过下标操作进行赋值时,不会添加任何元素。

2、vector容器的const_iterator迭代器和const的vector容器iterator迭代器区别。
讲解:(1)对于const_iterator迭代器中重点指的是其中的对象是const类型,所以可以对迭代器进行自增以及使用解引用操作符进行取值,但是不能够对其中的元素进行赋值,即其中的对象是不能够修改的。(2)const的iterator迭代器,就是指的是迭代器本身是const类型,注意的便是声明迭代器是需要初始化。并且一旦初始化之后便不能够改变它的值。

3、在vector容器中添加元素需要注意的知识点
vector容器添加元素,可以使用push_back(t)函数,但是不可以使用push_front(t)函数,(顺序容器list和deque可以使用push_front(t)函数),另外insert(p,t)函数可以在vector容器的任意位置添加新元素,它的意思是在迭代器p所指向的元素的前面插入值为t的新元素。但是值得注意的是返回值指向新添加元素的迭代器。关于这点代码演示如下:
vector<string> ivec;
vector<string> :: iterator iter=ivec.begin();
while(cin>>word){
iter=ivec.insert(iter,word)}//这段代码就是利用了这一点给空的ivec通过while循环添加元素。

4、vector容器访问元素需要注意的知识点
代码讲解:*if(!ivec.empty()){
vector<int> :: iterator val=*ivec.begin();
vector<int> :: iterator val2=ivec.front();
vector<int> :: iterator last=*–ivec.end();
vector<int> :: iterator last2=ivec.back();}*
上段代码中val和val2是相等的,last和last2是相等的。就是front函数是指向ivec的第一个元素,而back函数是指向ivec的最后一个元素。其次对于vector容器还可以通过at()函数在任意位置添加新元素。

5、vector容器删除元素操作需要注意的知识点
代码讲解:vector<string> :: iterator elem1,elem2;
elem1=find(ivec.begin(),ivec.end(),val1);
elem2=find(elem1,ivec.end(),val2);
ivec.erase(elem1,elem2);
在这段代码中需要注意两点:(1)对于erase()函数来说它是有返回值的它的返回值是指向删除元素后面的元素,如果elem2指向的是超出末端的先一个位置的迭代器,则返回值的迭代器也是指向容器的超出末端的下一个位置;(2)上面调用erase()函数删除的是迭代器elem1开始一直到elem2之间所有元素,包含elem1,但是不包含elem2。

6、vector容器的size()函数和capacity()函数的区别
讲解:size()函数指的是容器当前拥有的元素的个数,而capacity()函数指的则是容器在必须分配新内存空间之前可以存储的元素总数。代码讲解如下:
vector<int> ivec;
cout<< “ivec size:”<< ivec.size();
cout<<”ivec capacity:”<< ivec.capacity() << endl;
//上面代码自然输出的两个值都是0,因为其中还没有添加元素。
for(vector<int> size_type ix=0;ix!=24;++ix){
ivec.push_back(ix);}
cout<<”ivec size:”<< ivec.size();
cout<<”ivec capacity:”<< ivec.capacity()<< endl;
//这时输出的结果:ivec size:24 ivec capacity:32
显然结果就不同了,而且capacity一般比size的值要大。

7、vector容器迭代器失效知识点详解注意
讲解:关于插入和删除等操作一般易引起迭代器失效。比如:(1)insert()操作,插入点之后所有的迭代器失效,但是如果引起内存重分配,则所有迭代器失效;(2)erase()操作,删除点之后所有迭代器失效;(3)push_back()操作一般不会引起迭代器失效,但是如果引发内存重分配,则所有迭代器失效。(4)vector的reserve()操作会使得迭代器全部失效(引起了内存重分配);(5)swap()操作不会使得迭代器失效。

1 0
原创粉丝点击