您的位置:首页 > 编程语言 > C语言/C++

C++注意事项-----------删除,添加等操作可能会使当前迭代器失效

2015-10-13 22:49 405 查看
erase ,pop_front,pop_back 函数会使指向被删除元素的所有迭代器失效

对于vector 容器来说,指向删除节点后面的元素的迭代器也会失效

对于deque容器,如果删除时不包含第一个或最后一个元素,那么该deque容器相关的所有迭代器都会失效

eg1.  实现函数,删除vector<int> 容器中的偶数元素

由于迭代器失效的原因,单纯的遍历一次整个容器不能达到目标, 每次发生erase操作后,都需要从头开始使用新的迭代器进行遍历,故考虑使用递归实现:

void deleteVectorOdd(vector<int> & ivec)

{

   for(vector<int>::iterator i = ivec.begin() ; i!= ivec.end(); ++i)

   {

       if( (*i) %2 ==0)

         {

             ivec.erase(i);

             deleteVectorOdd(ivec);

             break;

         }

    }

}

eg2.  实现函数,删除list 容器中的奇数元素

与上面类似,也使用递归实现

void deleteListeven(list<int> & ilist)

{

    for(list<int>::iterator i = ilist.begin() ; i!= ilist.end() ; ++i)

    {

        if(  (*i) %2 !=0)

          {

              ilist.erase(i);

              deleteListeven(ilist);

              break;

          }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: