📅  最后修改于: 2023-12-03 15:13:56.452000             🧑  作者: Mango
在C++ STL中,list是一个双向链表容器,可以实现O(1)的插入和删除操作。其中,list::remove()方法和list::remove_if()方法用于删除list容器中符合条件的元素。
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()方法可以用于删除满足特定条件的元素。该方法接受一个函数作为参数,该函数返回值为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}。