C++ 算法 remove_copy_if()

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

C++ 算法 remove_copy_if() 函数用于将范围 [first, last) 中的所有元素复制到始于 result 的范围中,除了那些 pred 返回 true 的元素,同时不打乱剩余元素的顺序。

此函数无法更改容器的大小。

  • 它返回一个指向新范围末尾的迭代器。
  • 移除是稳定的,这意味着未移除元素的相对顺序保持不变。

语法

参数

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

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

result:一个输出迭代器,指向要将元素移除到的范围的初始位置。

pred:如果元素的值要被替换,则必须满足的条件。

返回值

一个前向迭代器,指向复制范围的新结束位置 (last),该范围包括 [first, last) 中的所有元素,除了那些 pred 将返回 true 的元素。

复杂度

复杂度在范围 [first, last) 内是线性的:对每个元素应用 pred,并对未移除的元素执行赋值操作。

数据竞争

访问范围 [first, last) 中的对象。

result 和返回值之间的范围中的对象会发生变化。

异常

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

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

示例 1

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

输出

2,4,6,8,

示例 2

让我们看另一个简单示例

输出

elements of v1 before remove_copy: 10 11 12 13 14 15 16 17 18 19 20 
elements of v1 after remove_copy: 10 11 12 13 14 15 16 17 18 19 20 
After removing Odd Numbers from v1 copy result in vector v2
10 12 14 16 18 20 0 0 0 0

示例 3

让我们看另一个简单示例

输出

Numbers { 10 20 10 15 12 25 30 10  }

Total number of elements copied to Result = 6
Result { 10 20 10 15 12 10 0 0  }

示例 4

让我们看另一个简单示例

输出

The original vec1 vector data: 0 1 2 3 4 5 6 7 8 9 10 5 5 5 

The original vec1 vector data randomly shuffled: 4 10 5 5 0 5 5 1 6 9 3 7 8 2 

After the remove_copy_if() operation, the vec1 vector is left unchanged as: 4 10 5 5 0 5 5 1 6 9 3 7 8 2 

vec2 vector is a copy of vec1 vector with values greater than 7 removed: 4 5 5 0 5 5 1 6 3 7 2

下一主题C++ 算法