C++ 算法 remove_copy()

30 Aug 2024 | 3 分钟阅读

C++ 算法 remove_copy() 函数用于将范围 [first, last) 中不等于 val 的所有元素复制到提供的结果中,而不改变其余元素的顺序。

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

  • 它返回一个指向新范围末尾的迭代器。
  • 删除是稳定的。这意味着,未删除元素的相对顺序保持不变。
  • 此函数使用 operator== 将元素与给定值 val 进行比较。

语法

参数

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

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

result:指向正在删除元素的范围初始位置的输出迭代器。

val:要从范围 [first, last) 中删除的值。

返回值

一个前向迭代器,指向复制范围的新结束位置 (last),该范围包含 [first, last) 中的所有元素,除了那些与 val 比较相等的元素。

复杂度

复杂度与范围 [first, last) 成线性关系:比较每个元素,并对未删除的元素执行赋值操作。

数据竞争

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

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

异常安全

如果任何元素比较、元素赋值或迭代器操作抛出异常,此函数将抛出异常。

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

示例 1

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

输出

2,3,2,

示例 2

让我们看另一个简单示例

输出

myvector contains: 10 50 30 10 40 0 0 0

示例 3

让我们看另一个简单的示例来删除给定文本中的所有空格

输出

before: Text with some   spaces
after:  Textwithsomespaces

示例 4

让我们看另一个简单示例

输出

The original vector v1 is:     ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 ).
Vector v1 is left unchanged as ( 4 7 7 7 0 5 7 1 6 9 3 7 8 2 ).
Vector v2 is a copy of v1 with the value 7 removed:
 ( 4 0 5 1 6 9 3 8 2 0 ).

下一主题C++ 算法