码迷,mamicode.com
首页 > 其他好文 > 详细

Effective STL: 不同容器删除元素的方法

时间:2014-09-21 13:35:20      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:stl   迭代器   iterator   

不同容器删除元素的方法
  • 去除一个容器中有特定值的所有对象:
    如果容器是vector、string或deque,使用erase-remove惯用法。
    如果容器是list,使用list::remove。
    如果容器是标准关联容器,使用它的erase成员函数。

  • 去除一个容器中满足一个特定判定式的所有对象:
    如果容器是vector、string或deque,使用erase-remove_if惯用法。
    如果容器是list,使用list::remove_if。
    如果容器是标准关联容器,写一个循环来遍历容器元素,当你把迭代器传给erase时记得后置递增它(在erase一个元素之后,指向该元素的迭代器就失效了,所有在erase前要获取指向下一个元素的迭代器)。

    AssocContainer<int> c;
    ...
    for (AssocContainer<int>::iterator i = c.begin();
         i != c.end();
         /*nothing*/ ) // for循环的第三部分是空的;i现在在下面自增
    {
        if (badValue(*i))
        {
            c.erase(i++); // 对于坏的值,把当前的i传给erase,然后作为副作用增加i;
        }
        else
        {
            ++i; // 对于好的值,只增加i
        }
    }
    
  • 在循环内做某些事情(除了删除对象之外):
    如果容器是标准序列容器,写一个循环来遍历容器元素,每当调用erase时记得都用它的返回值更新迭代器

    如果容器是标准关联容器,写一个循环来遍历容器元素,当你把迭代器传给erase时记得后置递增



Effective STL: 不同容器删除元素的方法

标签:stl   迭代器   iterator   

原文地址:http://blog.csdn.net/wzzfeitian/article/details/39449403

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!