Vector的使用笔记(2)——Iterator
2011-06-01 23:05
309 查看
iterator
1.erase
一个简单的测试
输出结果却不是我希望的那样,
可以看到,在删除元素的遍历过程中,没有输出3,而且在最后的输出中,有3这个元素,也就是说,3没有被删除。
This is interesting!
erase将it所在位置删除,并将后面的元素移到前面来,那么在删除2之后,it对应位置成为3,而此时it++,导致被移上来的3没有遍历到,才导致最后3没有被删除。
所以应该改一下,
在不删除元素时,it++,这样才可以正常工作。
1.erase
//删除一个元素 iterator erase(const_iterator pos); //删除一组元素, 范围 [first, last), 半闭半开区间 iterator erase(const_iterator first, const_iterator last); 两种情况都有返回值,返回最后被删除元素的后面一个的iterator.
一个简单的测试
vector<int> ak(6); unsigned int i = 0; for(i=0;i<ak.size();i++){ ak[i] = i; } for(i=0;i<ak.size();i++){ cout << ak[i] << " "; } cout << endl; vector<int>::iterator it = ak.end(); for(it=ak.begin();it!=ak.end();){ cout << (*it) << " "; it++; } cout << endl; for(it=ak.begin();it!=ak.end();){ cout << (*it) << " "; if((*it)>2 && (*it)<4) ak.erase(it); it++; } cout << endl; for(i=0;i<ak.size();i++){ cout << ak[i] << " "; } cout << endl;
输出结果却不是我希望的那样,
traverse by [] operator: 0 1 2 3 4 5 size: 6 capacity: 6 traverse by iterator: 0 1 2 3 4 5 traverse and erase: 0 1 2 4 5 after erase: 0 1 3 4 5 size: 5 capacity: 6
可以看到,在删除元素的遍历过程中,没有输出3,而且在最后的输出中,有3这个元素,也就是说,3没有被删除。
This is interesting!
erase将it所在位置删除,并将后面的元素移到前面来,那么在删除2之后,it对应位置成为3,而此时it++,导致被移上来的3没有遍历到,才导致最后3没有被删除。
所以应该改一下,
if((*it)>2 && (*it)<4) ak.erase(it); else it++;
在不删除元素时,it++,这样才可以正常工作。
相关文章推荐
- 小记—— vector 删除指定下标中的元素(不使用迭代器(iterator ))
- Java 中Iterator 、Vector、ArrayList、List 使用深入剖析
- 【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记
- Java 中Iterator 、Vector、ArrayList、List 使用深入剖析[转]
- Java 中Iterator 、Vector、ArrayList、List 使用深入剖析
- cocos2d-x 中的数据结构集合(容器)(CCArray,Map,Vector)使用笔记
- vector和iterator的使用,排序,打印,挑选偶数
- vector iterator 的使用
- vector的sort使用——学习笔记
- vector的iterator的错误使用
- 黑马程序员_学习笔记:9) 集合框架1:Collection(List、Set)、Iterator、List(ArrayList、LinkedList、Vector)
- javaIterator 、Vector、ArrayList、List 使用深入剖析
- android VectorDrawable使用笔记(二)
- C++学习笔记--标准库类型(vector,iterator,bitset)(一)
- C++ Vector 与STL Iterator的使用
- cocos2d-x 3.0开发笔记---vector的使用
- 关于迭代器vector::iterator的使用
- android VectorDrawable使用笔记(三)
- C++ 使用vector 出现"vector iterator not incrementable"或"vector iterator + offset out of range"错误的情况
- Java 中Iterator 、Vector、ArrayList、List 使用深入剖析