Halibaba

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

今天做一个小程序,居然发现用vector的删除操作时遇到了问题:考虑,当需要遍历容器,并且对其中某些元素进行删除操作,正确的做法是怎样?

首先,容器的删除操作,如vector的erase,其参数为游标类型,直接在遍历过程中利用游标进行删除的话,涉及到游标的移动问题,容易产生越界错误。

直接上例子吧,非常简单:

//////////////////////////////////////////////////////
vector<int>::iterator itr = v.begin();
while( itr!=v.end() )

{
  if( need to delete )

    itr = v.erase(itr);

  else

    itr++;
}

//////////////////////////////////////////////////////
list<int>::iterator itr = lst.begin();
while( itr!=lst.end() )

{
  if( need to delete )

    itr = lst.erase(itr);

  else

    itr++;
}

其原理也非常容易记忆:只要保证在erase元素的时候,新游标通过返回值获取,而不能再自增即可。

 

posted on 2013-11-06 19:41  Halibaba  阅读(218)  评论(0编辑  收藏  举报