std::
list::remove_if
公众成员函数 <list>
template <class Predicate>
void remove_if (Predicate pred);
移除满足条件的元素
从容器中移除Predicate pred返回true的所有元素。
这调用这些对象的析构函数,并按删除元素的数量减少容器大小。
该函数对每个元素调用pred(*i)(其中i是该元素的迭代器)。
该函数返回的列表中的任何元素都将从容器中删除。
☲ 参数
-
pred
-
一个一元谓词,它接受一个与forward_list对象中包含的值类型相同的值,
对于要从容器中删除的值返回true,对于剩余的值返回false。
它可以是函数指针,也可以是函数对象。
☉ 返回值
none
☣ 示例
// list::remove_if
#include <iostream>
#include <list>
// a predicate implemented as a function:
bool single_digit (const int& value) { return (value<10); }
// a predicate implemented as a class:
struct is_odd {
bool operator() (const int& value) { return (value%2)==1; }
};
int main ()
{
int myints[]= {15,36,7,17,20,39,4,1};
std::list<int> mylist (myints,myints+8); // 15 36 7 17 20 39 4 1
mylist.remove_if (single_digit); // 15 36 17 20 39
mylist.remove_if (is_odd()); // 36 20
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: 36 20
✥ 复杂度
列表大小线性(pred的应用程序)。
☣ 迭代器的有效性
指向被函数移除元素的迭代器、指针和引用将失效。
所有其他迭代器、指针和引用保持其有效性。
⇄ 数据竞争
容器修改。
删除的元素被修改。同时访问或修改其他元素是安全的,但遍历容器则不是。
☂ 异常安全性
如果pred保证不抛出异常,则该函数永远不会抛出异常(无抛出保证)。
否则,如果抛出异常,容器将保持有效状态(基本保证)。
🍄 另请参阅
list::remove |
按值删除元素(公众成员函数) |
list::unique |
删除重复的值(公众成员函数) |
list::erase |
删除元素(公众成员函数) |
list::back |
删除最后一个元素(公众成员函数) |
list::front |
删除第一个元素(公众成员函数) |