练习9.25
如果elem1和elem2相等,则什么都不会发生,因为elem1是要删除的第一个元素,而elem2是删除最后一个元素的后一个位置,所以什么都不会发生;
如果elem2是尾后迭代器,那么删除的是elem1到容器尾所有元素;
如果皆为尾后迭代器,仍然什么都不会发生。
练习9.26
1 #include <iostream> 2 #include <vector> 3 #include <list> 4 #include <deque> 5 #include <string> 6 #include <iterator> 7 8 using namespace std; 9 10 11 int main() 12 { 13 int ia[] = { 0,1,1,2,3,5,8,13,21,55,89 }; 14 vector<int> v; 15 list<int> l; 16 for (auto c : ia) 17 { 18 v.push_back(c); 19 l.push_back(c); 20 }
//int ia[] = {0,1,1,2,3,5,8,13,21,55,89};
//vector<int> ivec(ia,end(ia));
//list<int> ilist(ivec.begin(),ivec.end()); //这种复制方法更简单,效率更高
21 for (auto it = v.begin(); it != v.end();) 22 { 23 if ((*it) % 2 == 0) 24 it = v.erase(it); 25 else 26 ++it; 27 } 28 for (auto it1 = l.begin(); it1 != l.end();) 29 { 30 if ((*it1) % 2 != 0) 31 it1 = l.erase(it1); 32 else 33 ++it1; 34 } 35 for (auto c : v) 36 cout << c << endl; 37 cout << endl; 38 for (auto c : l) 39 cout << c << endl; 40 system("pause"); 41 return 0; 42 }