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

不同容器删除元素的方法
  • 去除一个容器中有特定值的所有对象:

    如果容器是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时记得后置递增

时间: 2024-07-30 10:17:07

Effective STL: 不同容器删除元素的方法的相关文章

条目九《慎重选择删除元素的方法》

慎重选择删除元素的方法 不同容器删除元素的方法是有区别的. 对于删除容器里的一个元素 序列容器( string, vector, deque)最高效的方法是erase-remove. list最高效的方法是remove. 关联容器没有remove成员函数,只有erase,直接用erase函数来删除元素. 若删除容器里符合一个判别式的元素: 序列容器( string, vector, deque)最高效的方法是erase-remove_if. list最高效的方法是remove_if. 关联容器的

STL中慎重选择删除元素的方法

 一.要删除容器中有特定值的所有对象 1.如果容器是vector.string或deque,则使用erase-remove习惯用法.例如: vector<int> c; c.erase(remove(c.begin(),c.end(),1963),c.end());//删除值是1963的元素 下面讲一下算法remove: template<classForwardIterator,class T> ForwardIteratorremove(ForwardIterator fi

STL容器删除元素的陷阱

今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector<struct> mFriendList;...std::vector<struct>::iterator iter = mFriendList.begin();for ( ; iter != mFriendList.end(); ++iter){    if (...)        mFr

给数组添加一个根据指定下标删除元素的方法、得到0-100的随机数不重复(js)、得到外联样式的css样式值

/** *删除数组指定下标或指定对象 */ Array.prototype.remove=function(obj){ for(var i =0;i <this.length;i++){ var temp = this[i]; if(!isNaN(obj)){ temp=i; } if(temp == obj){ for(var j = i;j <this.length;j++){ this[j]=this[j+1]; } this.length = this.length-1; } } }

Effective STL--不同容器删除特定元素的方法

输入迭代器是每个迭代位置智能被读一次的只读迭代器.输出迭代器是每个迭代位置只能被写一次的只写迭代器.输入和输出迭代器被塑造为读和写输入和输出流.前向迭代器有输入和输出迭代器的能力,但是他们可以反复读或写一个位置.它们不支持operator--,所以他们可以高效地向前移动任意次数.所有的标准STL容器都支持比前向迭代器更强大的迭代器.散列容器是前向迭代器,单链表容器也提供前向迭代器 双向迭代器就想前向迭代器,除了他们的后退尅像前进一样容易.标准关联容器都提供双向迭代器.List也有. 随机访问迭代

慎重选择删除元素的方法

总结本条款,一共有以下几点是需要牢记的: 1.要删除容器中有特定值的所有对象: (1).如果容器是vector.string或deque,则使用erase-remove习惯用法. (2).如果容器是list,则使用list::remove (3).如果容器是标准关联容器,则使用它的erase成员函数. eg:  假定你有一个标注的STL容器c,它包含int类型的整数:Container<int> c; 而你想删除c中所有值为1963的元素.则可以使用erase-remove.习惯用法: c.e

Effective STL --关联容器

高效STL-关联容器 标准关联容器中最重要的就是基于等价而不是相等.比如对于基本的函数库有find函数,但是对于set关联容器也是有find成员函数的.因为标准关联容器保持有序,所以每一个容器必须有一个定义了怎么保持东西有序的比较函数(默认是less).等价是根据这个比较函数定义的,所以标准关联容器的用户只需要为他们要使用的任意容器指定一个比较函数 必须为指针的关联容器指定比较类型 一定要明确对于一个容器来说,容器内的迭代器是存入该容器对象的指针,比如一个关联容器存入指针类型,那么使用这个容器的

开源中国 AnAppManager 从栈中删除元素的方法为什么不用出栈的方法呢?

今天写Demo的时候,发现了个问题,调试了半天,发现个规律:  从B 跳转到A界面 并finish 掉B,A的onCreate  居然快于B的onDestroy  ,使得在APP 开发 常用的管理界面的工具类中,一般界面初始化入栈,销毁的时候出栈.将界面从栈中移除的时候,选则的是 栈的remove 方法,而没有选择 pop出栈删元素的方法,如果采用这种方法,会发现当从B跳转到A的时候,A也会被关掉.

慎重选择删除元素的方法STL

1.要删除容器中有特定之的所有对象: 如果容器是vector.string或deque,则使用erase-remove习惯用法. 如果容器是list,则使用list::remove. 如果容器是一个标准关联容器,则使用它的erase成员函数. 2.要删除容器中满足特定判别式(条件)的所有对象: 如果容器是vector.string或deque,则使用erase-remove_if习惯用法. 如果容器是list,则使用list::remove_if. 如果容器是一个标准关联容器,则使用remove