STL - 移除(remove)和释放(erase)集合元素

简介: remove(移除): 这个操作并不是真正地删除元素,它会移除指定的元素,然后后面的元素依次前移,最后用别的元素来补充。 erase(释放): 这个操作会指定释放区间的头和尾迭代器(iterator)。

remove(移除):

这个操作并不是真正地删除元素,它会移除指定的元素,然后后面的元素依次前移,最后用别的元素来补充。

erase(释放):

这个操作会指定释放区间的头和尾迭代器(iterator)。

 

如果要一次性删除指定元素:

coll.erase(remove(coll.begin(), coll.end(), [removed element]), coll.end()); 

 

代码如下:

 

list<int> coll1;

    for (int i = 1; i <= 6; ++i)
    {
        coll1.push_front(i);
        coll1.push_back(i);
    }

    cout << "** collection 1: **" << endl;
    ContainerUtil<list<int>>::printElements(coll1);

    // remove all elements with value 3
    list<int>::iterator end = remove(coll1.begin(), coll1.end(), 3);

    cout << "** collection 1(after remove elements 3): **" << endl;
    ContainerUtil<list<int>>::printElements(coll1);

    // print number of removed elements
    cout << "number of removed elements : " << distance(end, coll1.end()) << endl;

    // release 'removed' elements
    coll1.erase(end, coll1.end());
    cout << "** collection 1(after releasing removed elements): **" << endl;
    ContainerUtil<list<int>>::printElements(coll1);

    // remove & release elements with value 4 all at once
    coll1.erase(remove(coll1.begin(), coll1.end(), 4), coll1.end());
    cout << "** collection 1(after remove & release elements 4): **" << endl;
    ContainerUtil<list<int>>::printElements(coll1);

 

运行结果:

** collection 1: **
  6  5  4  3  2  1  1  2  3  4  5  6
** collection 1(after remove elements 3): **
  6  5  4  2  1  1  2  4  5  6  5  6
number of removed elements : 2
** collection 1(after releasing removed elements): **
  6  5  4  2  1  1  2  4  5  6
** collection 1(after remove & release elements 4): **
  6  5  2  1  1  2  5  6

 

目录
相关文章
|
6月前
|
C++
移除元素(C++)
移除元素(C++)
35 0
|
6月前
map删除迭代器的处理
map删除迭代器的处理
01_移除链表元素
01_移除链表元素
|
5月前
27.移除元素
27.移除元素
|
6月前
|
C++
移除链表元素(C++)
移除链表元素(C++)
39 1
|
安全
ArrayList中remove()方法删除元素之后下标重定位的问题
ArrayList中remove()方法删除元素之后下标重定位的问题
移除链表元素
1. 判断head是否为空,为空的话直接返回空(链表的题基本上都要考虑是否为空) 2. 定义两个节点,一个在前(cur)一个在后(prev)(当cur.val == val 的时候,可以通过prev将后面的节点跳过这个节点连接到下一个节点)
39 0
List中移除指定元素
List中移除指定元素
95 0
|
Java
「日更刷题」203. 移除链表元素
「日更刷题」203. 移除链表元素
78 0
|
安全 容器
别被vector最后一个元素erase错误
别被vector最后一个元素erase错误
177 0
别被vector最后一个元素erase错误