C/C++/Linux/Embedded

学习也是一种乐趣
<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

  • 随笔 - 4
  • 文章 - 4
  • 评论 - 4
  • 引用 - 0

常用链接

留言簿(1)

随笔档案

文章分类

文章档案

收藏夹

搜索

  •  

最新评论

阅读排行榜

评论排行榜

遍历删除vector的中的元素

一般来说vector不适合做经常删除的容器,但是在某些情况下,我们确实需要删除vector的部分元素,一般的方式类为v.erase(remove_if(v.begin(), v.end(), func)).但是本人懒的把操做写到另一个函数中,下面是一个更好的办法

vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rbegin())
{
    
if (func(*rit)) //检查是否需要删除
        v.erase((++rit).base());
    
else
       
++rit;
}

其中reverse_iterator和iterator的关系与转换是关键,STL真是设计的强大.

posted on 2007-05-08 10:43 陈长虹 阅读(5780) 评论(4)  编辑 收藏 引用

评论

# re: 遍历删除vector的中的元素 2007-05-16 01:34 真 OO无双

您的方式真的不錯
不過請教一個問題
你說" 但是本人懒的把操做写到另一个函数中"
但是上面範例
if (func(*rit)) //检查是否需要删除
不還是需要func()來檢查嗎?

  回复  更多评论    

# re: 遍历删除vector的中的元素 2007-05-16 10:30 陈长虹

如果我要删除所有正数,写成if (*it > 0)
  回复  更多评论    

# re: 遍历删除vector的中的元素 2009-01-06 09:04 

vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rbegin())
这绝对是个错误 rit = v.rbegin 又 rit != v.rbegin 这个循环永远不会走进去的
  回复  更多评论    

# re: 遍历删除vector的中的元素 2010-09-15 19:57 wsxp

rit != v.rbegin())

--->

rit != v.rend()
  回复  更多评论    

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理