【翻译】std::list::remove - C++ Reference
公有成员函数
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 << '\n'; 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
智慧在街市上呼喊,在宽阔处发声。