练习9.25:对于第312页中删除一个范围内的元素的程序,如果elem1与elem2相等会发生什么?如果elem2是尾后迭代器,或者elem1与elem2相等会发生什么?如果elem2是尾后迭代器,或elem1和elem2阶是尾后迭代器,又会发生什么?
答:
//1.删除两个迭代器表示的范围内元素
//2.返回指向最后一个被删元素的之后位置的迭代器。
//3.elem1指向要删除的第一个元素 elem2 指向要删除的最后一个元素的下一个位置。
elem1 = slist.erase(elem1, elem2);//调用后 elem1 == elem2
相等时,猜测不会删除 任何元素 因为不包含任何元素在这个范围内。:正确
elem2 如果是尾迭代器,则会从elem1一直删除到最后一个元素。
都会尾迭代器 猜测会出错。 因为不能删除一个不存在的元素。:错误 不会出错 而是不会删除任何元素 elem1为尾函数。
练习9.26:使用下面代码定义ia,将ia拷贝到一个vector中和一个list中。使用单迭代器版本的erase从list中删除奇元素,从vector中删除偶元素。
int ia[] = {0,1,2,3,4,5,8,13,21,55,89};
int ia[] = {0,1,2,3,4,5,8,13,21,55,89};
vector<int> s1(ia,ia+11);
list<int> s2(ia,ia+11);
auto it = s1.begin();
while(it!=s1.end())
if(*it%2)
it= s1.erase(it);
else
it++;
auto it1 = s2.begin();
while(it1!=s2.end())
if(!*it1%2)
it1= s1.erase(it);
else
it1++;
上面代码,注意while(it!=s1.end()) 不能事先定义itn=s1.end();然后带入itn因为容器长度改变迭代器会失效。导致程序运行中断。