【翻译】std::list::remove

公有成员函数

std::list::remove


void remove(const value_type& val);

  删除与给定值相等的元素

  从容器中删除所有与 val 值相等的元素。list::remove 函数删除给定元素时,会调用被删除对象的析构函数,并且缩小相应大小的容器 size 。

  list::remove 与另一个成员函数 list::erase 不同,后者使用迭代器来确定需要被删除的元素;前者通过数值的方式来确定被删除元素。

  有一个与 list::remove 相似的函数—— list::remove_if ——它允许使用一个“仿函数”来确定被删除元素。

参数

  val 

  被删除元素的值。

  成员类型 value_type 是容器中元素的类型,作为一个模板参数 T 的别名,被定义在 list 中。

返回值

  没有返回值

用例

// remove from list
#include <iostream>
#include <list>

int main ()
{
  int myints[]= {17,89,7,14};
  std::list<int> mylist (myints,myints+4);

  mylist.remove(89);

  std::cout << "mylist contains:";
  for (std::list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '
';

  return 0;
}

  输出 : 

  mylist contains: 17 7 14

复杂度

  线性复杂度,取决于容器 size 。 O(n)

迭代器的有效性

  指向已被函数移除的元素的迭代器、指针和引用是非法的。不影响指向其他元素的指针、迭代器和引用。

数据种类

  容器是经过改进的

  被删除的元素会被修改。尽管遍历容器是不安全的,但并发访问或者修改其他元素是安全的。

异常安全

  如果比较两个元素不会抛出异常,那么 list::remove 将不会抛出异常。(可以确保不会抛出异常)

  否则,如果一个异常被抛出,容器会留下一个有效状态。(基本能够保证)

参阅

list::remove_if 移除满足条件的元素
list::erase 擦除元素
list::unique 移除重复元素
list::pop_back 删除最靠后的元素
list::pop_front 删除最靠前的元素

感谢

  Mengmeng Zhang

原文地址:http://www.cplusplus.com/reference/list/list/remove/

原文地址:https://www.cnblogs.com/fengyubo/p/5052400.html