📜  C++中的std :: unique_copy(1)

📅  最后修改于: 2023-12-03 14:39:57.741000             🧑  作者: Mango

C++中的std::unique_copy

在C++中,标准库提供了std::unique_copy函数,它可以用来复制给定范围内的元素到另一个范围,并去除相邻的重复元素。

函数原型

std::unique_copy函数的原型如下:

template< class InputIt, class OutputIt >
OutputIt unique_copy( InputIt first, InputIt last, OutputIt d_first );

template< class InputIt, class OutputIt, class BinaryPredicate >
OutputIt unique_copy( InputIt first, InputIt last, OutputIt d_first,
                      BinaryPredicate p );
  • firstlast 是输入范围的迭代器,表示要复制的元素范围。
  • d_first 是输出范围的迭代器,表示复制后的元素要存放的位置。
  • BinaryPredicate 是一个可选的参数,允许指定自定义的比较函数,用于确定相等的元素。
特点和用法
  • std::unique_copy函数会将给定范围内的元素按顺序复制到输出范围,并且会把相邻重复的元素去除,只保留一个。
  • 这个函数可以用于任何可通过输入和输出迭代器进行迭代的容器,例如vector,list和数组等。
  • std::unique_copy函数返回一个指向输出范围中最后一个复制元素之后位置的迭代器。
示例

下面是一个示例,演示了如何使用std::unique_copy函数:

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

int main() {
    std::vector<int> input = {1, 2, 2, 3, 4, 4, 4, 5};

    std::vector<int> output;
    std::unique_copy(input.begin(), input.end(), std::back_inserter(output));

    std::cout << "Unique elements: ";
    for (const auto& element : output) {
        std::cout << element << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果为:

Unique elements: 1 2 3 4 5

在上面的示例中,我们定义了一个输入向量input,其中包含一些重复的元素。然后我们使用std::unique_copy函数将去除重复元素后的结果复制到输出向量output中。最后,我们使用循环打印输出向量中的元素。

自定义比较函数

除了默认的比较运算符外,我们还可以通过提供自定义的比较函数来确定相等的元素。比如,如果我们想要根据元素的绝对值来判断是否相等,可以使用以下示例代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cmath>

bool compareAbsoluteValue(int a, int b) {
    return std::abs(a) == std::abs(b);
}

int main() {
    std::vector<int> input = {1, -1, 2, -2, 3, -3};

    std::vector<int> output;
    std::unique_copy(input.begin(), input.end(), std::back_inserter(output), compareAbsoluteValue);

    std::cout << "Unique elements based on absolute value: ";
    for (const auto& element : output) {
        std::cout << element << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果为:

Unique elements based on absolute value: 1 2 3

在上面的示例中,我们定义了一个自定义的比较函数compareAbsoluteValue,它通过比较元素的绝对值来判断是否相等。然后,我们将该函数作为参数传递给std::unique_copy函数,以便使用自定义的比较规则去除重复元素。

小结

std::unique_copy函数是C++标准库中非常有用的函数之一,它可以方便地将一个范围内的元素复制到另一个范围,并去除相邻的重复元素。使用这个函数可以提高代码的简洁性和可读性,同时能够节省人工去除重复元素的时间和精力。