9.3.3节练习

练习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因为容器长度改变迭代器会失效。导致程序运行中断。

猜你喜欢

转载自blog.csdn.net/xnnswmzdszyd/article/details/89646916
今日推荐