Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

forward_list::remove_if

公众成员函数  <forward_list>
template <class Predicate>
  void remove_if (Predicate pred);

移除满足条件的元素

从容器中移除Predicate pred返回true的所有元素。 这将调用这些对象的析构函数,并按删除的元素数量减少容器大小。

该函数为每个元素调用pred(*i)(其中i是该元素的迭代器)。该语句返回true的列表中的任何元素都会从容器中删除。

☲  参数


pred
一元谓词:接受与forward_list对象中包含的值类型相同的值,从容器中删除的值返回true,其余的返回false.
它可以是函数指针,也可以是函数对象。

☉  返回值



none

☣  示例



// forward_list::remove_if
#include <iostream>
#include <forward_list>

// a predicate implemented as a function:
bool single_digit (const int& value) { return (value<10); }

// a predicate implemented as a class:
class is_odd_class
{
public:
  bool operator() (const int& value) {return (value%2)==1; }
} is_odd_object;

int main ()
{
  std::forward_list<int> mylist = {7, 80, 7, 15, 85, 52, 6};

  mylist.remove_if (single_digit);      // 80 15 85 52

  mylist.remove_if (is_odd_object);     // 80 52

  std::cout << "mylist contains:";
  for (int& x: mylist) std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

输出:
mylist contains: 80 52

✥ 复杂度



容器大小线性(pred的应用)。

☣ 迭代器的有效性



指向被函数删除的元素的迭代器、指针和引用将失效。 所有其他迭代器、指针和引用保持其有效性。

⇄ 数据竞争


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

☂ 异常安全性



如果pred保证不抛出异常,则函数永远不会抛出异常(no-throw保证)。
否则,如果抛出异常,容器将保持有效状态(基本保证)

🍄  另请参阅



forward_list::remove 删除具有特定值的元素(公共成员函数)
forward_list::erase_after 删除元素 (公共成员函数)
forward_list::pop_front 删除第一个元素 (公共成员函数)
forward_list::unique 删除重复的值 (公共成员函数)

联系我们 免责声明 关于CandCplus 网站地图