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

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 删除第一个元素(公众成员函数)

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