C++ Algorithm unique_copy()

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

C++ 算法 unique_copy() 函数用于复制序列,使得每个重复的连续元素都变成一个唯一的元素。

  • 它不会改变原始范围,而是将结果复制到另一个容器中。
  • 第一个版本使用 operator== 比较元素,第二个版本使用给定的二元谓词 pred。

语法

参数

first:指向要复制的范围中第一个元素位置的前向迭代器。

last:指向要复制的范围中最后一个元素之后一个位置的前向迭代器。

pred:用户定义的谓词函数对象,它定义了如果范围中的两个元素被认为是等效时应满足的条件。二元谓词接受两个参数,并在满足条件时返回 true,不满足时返回 false。

result:指向复制范围中第一个元素位置的输出迭代器,该复制范围将接收已删除连续重复项的副本。

返回值

一个迭代器,指向已复制范围 [first, last) 的新末尾,该范围不包含连续重复项。

复杂度

复杂度与范围 [first, last) 成线性关系:比较每对连续元素,并对其中一些元素执行赋值操作。

数据竞争

访问范围 [first, last) 中的对象,并修改 result 和返回值的范围之间的对象。

异常安全

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

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

示例 1

让我们看一个简单的例子来演示 unique_copy() 的使用,其中元素将通过 operator== 进行比较

输出

Before: 100 100 300 300 300 500 100 300 300 600 600 700 

After:  100 300 500 100 300 600 700  

在上面的例子中,向量 v 中所有连续重复元素子组都被简化为只剩一个元素并复制到新向量 v1 中。

示例 2

让我们看另一个简单的例子来演示 unique_copy() 的使用,其中元素将通过预定义函数进行比较

输出

Before: You arre vvvisiting vvvogie bbogie
After: You arre visiting vogie bbogie

示例 3

让我们看另一个简单的例子来检查容器是否包含重复元素

输出

v1 contains only unique elements

在上面的例子中,我们首先从向量 v 中删除重复元素,并将结果元素存储到另一个向量 v1 中,然后将 v1 与 v 进行比较,如果两者相同。(这意味着之前的向量 v 只包含唯一元素,并且没有重复元素)。

示例 4

让我们看另一个简单的例子来删除给定语句中的所有空格

输出

before:  The      string    with many       spaces!
after:    The string with many spaces!

下一主题C++ 算法