C++ Algorithm replace_copy_if()

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

C++ Algorithm replace_copy_if() 函数用于将范围 [first, last) 复制到以 result 开头的范围,将那些满足 pred 返回 true 的元素替换为 new_value。它使用谓词 pred 而不是 operator== 来比较元素。

此函数检查源范围中的每个元素,如果满足指定的谓词,则替换它,同时将结果复制到新的目标范围中。

语法

参数

first:一个输入迭代器,指向要替换元素的范围中的起始位置。

last:一个输入迭代器,指向要替换元素的范围中的最终位置。

result:一个输出迭代器,指向存储结果序列的范围的第一个元素。

pred:如果元素的旧值要被替换,则必须满足的一元谓词。

old_value:要替换元素的旧值。

new_value:赋给具有旧值的元素的新值。

返回值

replace_copy_if() 函数返回一个输出迭代器,指向结果序列中写入的最后一个元素的位置。

复杂度

复杂性与 first 和 last 之间的距离呈线性关系:对每个元素应用 pred 并执行一次赋值。

数据竞争

访问范围 [first1, last1) 中的对象。

result 范围内的对象和返回的值被修改。

异常安全

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

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

示例 1

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

输出

10,10,2,10,2,

示例 2

让我们看另一个简单示例

输出

Before replace_copy_if: 1 2 3 4 5 6 7 8 9 10 
After replace_copy_if: 1 0 3 0 5 0 7 0 9 0

示例 3

让我们看另一个简单示例

输出

Numbers { 10 20 10 15 12 7 9 10  }

Total number of elements copied to Result = 8
Result  { 30 30 30 30 30 7 9 30  }

示例 4

让我们看另一个简单示例

输出

The original vector v1 is:
 ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ).
The vector v1 with values of 70 replacing those greater
 than 6 in the 1st half & copied into the 2nd half is:
 ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 4 70 70 70 0 5 70 1 6 70 3 70 70 2 ).
A list copy of vector v1 with the value -1
 replacing those greater than 6 is:
 ( 4 -1 -1 -1 0 5 -1 1 6 -1 3 -1 -1 ).

下一主题C++ 算法