📅  最后修改于: 2023-12-03 14:39:57.741000             🧑  作者: Mango
在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 );
first
和 last
是输入范围的迭代器,表示要复制的元素范围。d_first
是输出范围的迭代器,表示复制后的元素要存放的位置。BinaryPredicate
是一个可选的参数,允许指定自定义的比较函数,用于确定相等的元素。std::unique_copy
函数会将给定范围内的元素按顺序复制到输出范围,并且会把相邻重复的元素去除,只保留一个。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++标准库中非常有用的函数之一,它可以方便地将一个范围内的元素复制到另一个范围,并去除相邻的重复元素。使用这个函数可以提高代码的简洁性和可读性,同时能够节省人工去除重复元素的时间和精力。