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

如何选择STL容器中对象的删除方法

时间:2014-07-16 20:25:12      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   使用   strong   os   

备注:唯一从容器中除去一个元素的方法是在那个容器上调用一个成员函数。

 

  以下介绍删除不同类型的容器中满足某种条件的值的方法,某种条件指的是

bool badValue(int value)返回true的情况。

1、序列容器

for(SeqContainer<int>::iterator i = c.begin();
    i != c.end();
    /*nothing*/)
{
    if(badValue(*i))
    {
        //something to do
        i = c.erase(i);
    }
    else
        ++i;
}

这种情况下,一旦删除完成,erase的返回值它就是指向紧接在被删元素之后的元素的有效迭代器。

 

2、关联容器

for(AssocContainer<int>::iterator i = c.begin(); 
    i !=c.end();
    /*nothing*/)
{
    if (badValue(*i))
    {
        //something to do
        c.erase(i++); // 删除元素
    }
    else 
        ++i;
}

 

这种情况下,在erase开始执行前i已经自增了。

 

3、高效的方法(STL算法或容器自带算法)

3.1 序列容器,如SeqContainer<int> c:

  对于vector、deque或string,删除特定值,使用erase-remove:

c.erase(remove(c.begin(), c.end(), 1234), c.end());

  对于vector、deque或string,删除满足条件的值,使用erase-remove_if:

c.erase(remove_if(c.begin(), c.end(), badValue), c.end());

  对于List,删除特定值,使用自带的remove:

c.remove(1234);

  对于List,删除满足条件的值,使用自带的remove_if:

c.remove_if(badValue);

3.2 关联容器,如AssocContainer<int> c:

  标准关联容器(即set、multiset、map或multimap)并没有叫做remove的成员函数。

删除特定值方法,c.erase(1234);删除满足条件的值,见(2、关联容器)。

本文出自 商显技术博客,转载时请注明出处及相应链接。

本文永久链接: http://www.uchar.cn/?p=287

如何选择STL容器中对象的删除方法,布布扣,bubuko.com

如何选择STL容器中对象的删除方法

标签:style   http   color   使用   strong   os   

原文地址:http://www.cnblogs.com/richardor/p/3836804.html

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