C++学习笔记之erase
2015-08-10 19:47
489 查看
今天编写《C++primer》的习题9.26的小程序,主要是对erase的使用。先贴上代码。
开始忽略了我使用erase时候地迭代器会失效,于是在for循环里面直接直接写了
erase还有另外一种形式
另外需要注意:
1. vector中的迭代器可以进行加减运算,但是 list 中的迭代器不可以。因此在在以后的编写程序过程中尽量用
2. vector中没有
#include <iostream> #include <vector> #include <list> using namespace std; int main(){ int a[] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 }; size_t a_size = sizeof(a)/sizeof(int); vector<int> vec(a, a + a_size); list<int> lis(a, a + a_size); cout << "The original integers are: "; for(size_t i =0; i != a_size; ++i) cout << a[i] << " "; cout << endl; //erase operation on Vector for(vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter) if(*iter%2 != 0) iter = --vec.erase(iter); cout << "Vector is: "; for(vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter) cout << *iter << " "; cout << endl; //erase Operation on List for(list<int>::iterator iter = lis.begin(); iter != lis.end(); ++iter) if(*iter%2 == 0) iter = --lis.erase(iter); cout << "List is: "; for(list<int>::iterator iter = lis.begin(); iter != lis.end(); ++iter) cout << *iter << " "; cout << endl; return 0; }
开始忽略了我使用erase时候地迭代器会失效,于是在for循环里面直接直接写了
erase(iter),结果可想而知了。erase删除容器的一个元素以后会返回之指向已删除元素的下一个元素的迭代器,因此为了能够完整遍历整个容器,就将返回的迭代器减1以后重新赋给iter,这样iter会保持有效。
erase还有另外一种形式
c.erase(b,e)删除两个迭代器之间的元素,返回指向被删除元素段的后一个元素的迭代器。
c.pop_back()和
c.pop_front()分别删除容器 c 的最后一个和第一个元素
另外需要注意:
1. vector中的迭代器可以进行加减运算,但是 list 中的迭代器不可以。因此在在以后的编写程序过程中尽量用
++和
--。
2. vector中没有
c.push_front()和
c.pop_front()函数。
相关文章推荐
- 一道面试题细说C++类型转换
- C语言-Branch
- C++标准程序库笔记(1)
- c++ void,内存操作函数
- C++ template
- C++中四种强制类型转换
- 详解c++构造函数
- C++面向对象之浅谈
- C++对象的静态类型与动态类型
- c++中,static,和const,以及引用类型的作用
- C与C++的细微区别——省略形式参数名
- C++ opencv 数字识别
- C++的namespace
- c/c++处理字符串函数
- JNA java调用c/c++代码
- JNA调用C语言动态链接库学习实践总结
- 2015年8月10日 C语言 宏和快排
- C语言-06-复杂数据类型
- C++_命名空间namespace 与 using编译指令 与 using声明使用。
- (๑• . •๑)Eclipse的C++排版方式