std::forward_list remove() 方法
- 自 C++20 起
- 自 C++11 起
// (1) Non const version only
size_type remove( const T& value );
// (2) Non const version only
template< class UnaryPredicate >
size_type remove_if( UnaryPredicate p );
// (1) Non const version only
void remove( const T& value );
// (2) Non const version only
template< class UnaryPredicate >
void remove_if( UnaryPredicate p );
删除所有满足特定条件的元素。
- (1) 删除所有与
value
相等的元素。 - (2) 删除所有谓词
p
返回true
的元素。
参数
value
- 要删除的元素的值p
- 一元谓词,如果元素应被删除,则返回true
。表达式p(v)
对于所有类型的参数v
(可能是const
)T
,无论值类别如何,都必须可转换为bool
,并且不得修改v
。因此,不允许使用T&
作为参数类型,除非对于T
移动等同于复制,否则也不允许使用T
。
返回值
删除的元素数量。 (自 C++20 起)(none) (直到 C++20)
复杂度
与容器大小呈线性关系 - O(size())。
异常
(无)
备注
特性测试宏: __cpp_lib_generic_associative_lookup
。
示例
Main.cpp
#include <forward_list>
#include <iostream>
int main()
{
std::forward_list<int> l = { 1,100,2,3,10,1,11,-1,12 };
auto count1 = l.remove(1);
std::cout << count1 << " elements equal to 1 were removed\n";
auto count2 = l.remove_if([](int n){ return n > 10; });
std::cout << count2 << " elements greater than 10 were removed\n";
std::cout << "Finally, the list contains: ";
for (int n : l) {
std::cout << n << ' ';
}
std::cout << '\n';
}
输出
2 elements equal to 1 were removed
3 elements greater than 10 were removed
Finally, the list contains: 2 3 10 -1