C++ STL中的forward_list::remove()和forward_list::remove_if()
STL中的正向链表实现了 单向链表 。正向链表是在C++11中引入的,比其他容器在插入、删除和移动操作(如排序)上更加有用,并允许元素的时间常量插入和删除。它与列表的不同之处在于,正向链表仅跟踪下一个元素的位置,而列表则跟踪下一个和上一个元素的位置。
forward_list::remove()
remove() 函数用于从前向列表中删除与函数参数值相对应的所有值。此函数归类于 < forward_list>头文件。
语法:
参数: 作为参数传递要删除元素的值。
结果: 删除与参数传递的值相等的所有容器元素。
时间复杂度: 与容器大小成线性关系。
示例:
错误和异常:
- 如果传递的值与正向列表的类型不匹配,则会显示错误。
- 如果值和正向列表的元素之间的比较不引起任何异常,则不会引发异常。
输出:
forward_list::remove_if()
remove_if() 函数用于删除所有与作为函数参数给出的谓词或条件为真的列表值。函数遍历列表容器中的每个成员,并删除为谓词返回真的所有元素。此函数归类于 < forward_list>头文件。
语法:
参数: 以函数指针或函数对象形式传递谓词。
结果: 删除所有返回true的容器元素谓词。
时间复杂度: 与容器大小成线性关系。
示例:
错误和异常: 异常约束无异常抛出。
输出
应用remove_if(): 给定一个整数列表,从列表中删除所有质数并输出列表。
输出
让我们以表格形式比较它们的不同之处 -:
ID | forward_list::remove() | forward_list::remove_if() |
---|---|---|
1. | 它用于从容器中删除与val相等的所有元素。 | 它用于从容器中删除Predicate pred返回true的所有元素。 |
2. | 它的语法为-:remove (const value_type& val); | 它的语法为-:remove_if (Predicate pred); |
3. | 它的返回值是void类型。 | 它的返回值是void类型。 |
4. | 它需要一个参数,即要删除的元素的值。 | 它需要一个参数,即一元谓词。 |
5. | 它的复杂度是线性的。 | 它的复杂度是线性的。 |