📜  C++ STL中的list :: remove()和list :: remove_if()(1)

📅  最后修改于: 2023-12-03 15:13:56.452000             🧑  作者: Mango

C++ STL中的list::remove()和list::remove_if()

在C++ STL中,list是一个双向链表容器,可以实现O(1)的插入和删除操作。其中,list::remove()方法和list::remove_if()方法用于删除list容器中符合条件的元素。

list::remove()

list::remove()方法可以用于删除所有等于给定值的元素。例如,要删除list容器中所有等于5的元素,可以这样写:

std::list<int> mylist = {1,5,2,5,3,5,4,5};
mylist.remove(5);

调用list::remove(5)之后,mylist中的元素变为{1, 2, 3, 4}。

list::remove_if()

list::remove_if()方法可以用于删除满足特定条件的元素。该方法接受一个函数作为参数,该函数返回值为bool类型,用于判断元素是否需要删除。

例如,要删除list容器中所有偶数元素,可以这样写:

std::list<int> mylist = {1,2,3,4,5,6,7,8};
mylist.remove_if([](int x){ return x%2==0; });

调用list::remove_if()之后,mylist中的元素变为{1, 3, 5, 7}。

除了Lambda表达式,list::remove_if()方法还可以接受函数指针。

例如,假设我们有一个名为isNegative的函数,用于判断一个整数是否小于0,我们可以这样写:

bool isNegative(int x)
{
    return x < 0;
}

// ...

std::list<int> mylist = {-1,2,-3,4,-5,6,-7,8};
mylist.remove_if(isNegative);

调用list::remove_if()之后,mylist中的元素变为{2, 4, 6, 8}。