📜  C++ STL-algorithm.unique_copy()函数(1)

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

C++ STL-algorithm.unique_copy()函数介绍

简介

C++ STL(Standard Template Library)中的 <algorithm> 头文件提供了许多常用的算法,其中之一就是 unique_copy() 函数。这个函数用于从给定的输入范围复制元素到另一个输出范围,并且使得输出范围不包含重复的相邻元素。

语法

unique_copy() 函数的语法如下所示:

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

其中:

  • firstlast 是输入范围的迭代器,表示要复制的元素范围。[first, last) 是左闭右开区间。
  • d_first 是目标输出范围的迭代器,表示元素将被复制到的位置。
返回值

unique_copy() 函数返回一个迭代器,指向输出范围中最后一个复制的元素的下一个位置。

功能

unique_copy() 函数用于将输入范围中的元素复制到输出范围中,同时确保输出范围中不包含相邻的重复元素。具体地说,如果输入范围中的两个相邻元素相等,那么只会复制其中的一个元素到输出范围。对于非相邻元素的重复,会全部复制。

示例
#include <iostream>
#include <algorithm>
#include <vector>

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

    std::vector<int> output;

    std::unique_copy(input.begin(), input.end(), std::back_inserter(output));

    // 打印输出范围中的元素
    for (auto element : output) {
        std::cout << element << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出:

1 2 3 4 5

在上面的示例中,我们首先定义一个名为 input 的整数向量,其中包含一些重复的元素。然后,我们定义了一个新的空向量 output。利用 std::back_inserter inserter 是一种插入迭代器,它允许我们在输出范围的末尾添加新元素。我们使用 std::unique_copy() 函数将 input 中的元素复制到 output 中,确保输出范围中没有相邻的重复元素。

最后,我们通过遍历 output 向量并打印其中的元素,确认重复元素被移除,并且输出范围中的元素按顺序排列。

注意,在使用 std::unique_copy() 函数之前,必须确保输出范围有足够的空间来容纳所有的复制元素,否则会导致未定义行为。

这就是有关 C++ STL 中的 unique_copy() 函数的介绍。希望你能够理解并开始在你的程序中合理地使用它,以提高代码的质量和效率。