C++ 算法 remove_if()

2024年8月30日 | 阅读4分钟

C++ 算法 remove_if() 函数用于从给定范围 [first, last) 中删除所有满足特定谓词的元素,而不改变剩余元素的顺序。

  • 此函数无法更改容器的大小。
  • 它返回一个指向新范围末尾的迭代器。
  • 删除是稳定的,这意味着未删除元素的相对顺序保持不变。

语法

参数

first:一个前向迭代器,指向要从中移除元素的范围中第一个元素的位置。

last:一个前向迭代器,指向要从中移除元素的范围中最后一个元素之后的位置。

pred:接受一个元素作为参数的一元谓词函数,如果元素的某个值需要被替换,则必须满足该谓词。

返回值

一个前向迭代器,指向修改后范围的新结束位置 (last),如果 first 和 last 相等,则指向第一个元素。

复杂度

复杂性与范围 [first, last) 成线性关系:对每个元素应用 pred,并可能对其中一些元素执行赋值操作。

数据竞争

范围 [first, last) 中的对象被访问并可能被修改。

异常安全

如果 pred、元素赋值或迭代器上的操作抛出异常,此函数将抛出异常。

注意:无效参数会导致未定义行为。

示例 1

让我们看一个简单的例子来演示 remove_if() 的用法

输出

Original vector :  1 2 3 4 5 6 7 8 9 10
After remove_if : 2 4 6 8 10

示例 2

让我们看另一个简单示例

输出

 Vector v1 is ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 ).
Vector v1 with elements satisfying greater6 removed is
 ( 4 0 5 1 6 3 2 1 6 9 3 7 8 2 ).
Vector v1 resized elements satisfying greater6 removed is
 ( 4 0 5 1 6 3 2 ).

示例 3

让我们看另一个简单示例

输出

Vector : China    India    Korea    America    Australia    Pakistan    
Vector : China    India    Korea    Pakistan    

示例 4

让我们看另一个简单的例子,通过将所有非空格字符左移然后擦除多余的空格来删除字符串中的所有空格。

输出

Textwithsomespaces
Textwithsomewhitespaces

下一主题C++ 算法