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

📅  最后修改于: 2023-12-03 15:13:55.077000             🧑  作者: Mango

C++ STL - Algorithm.copy()函数

Algorithm.copy()函数是一个STL算法,用于将一个范围内的元素复制到另一个范围中,可以在不重叠的情况下复制。该函数定义如下:

template <class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);

其中,

  • InputIterator:输入迭代器类型,指向范围的起始位置;
  • OutputIterator:输出迭代器类型,指向复制目标范围的起始位置;
  • first:定义复制范围的第一个元素的迭代器;
  • last:定义复制范围的尾随元素的迭代器;
  • result:定义目标范围的起始位置的迭代器。

该函数将从[first, last)范围内复制元素到[result, result + (last - first))范围内。例如:

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

int main () {
    std::vector<int> a = {1,2,3,4,5};
    std::vector<int> b(5);
    std::copy(a.begin(), a.end(), b.begin());

    std::cout << "a contains:";
    for (auto i: a) {
        std::cout << ' ' << i;
    }
    std::cout << '\n';

    std::cout << "b contains:";
    for (auto i: b) {
        std::cout << ' ' << i;
    }
    std::cout << '\n';

    return 0;
}

该程序输出:

a contains: 1 2 3 4 5
b contains: 1 2 3 4 5
copy_backward()函数

除了copy()函数之外,STL还提供了一个copy_backward()函数,和copy()函数的作用相似,但是复制顺序与copy()函数恰好相反。该函数的定义如下:

template <class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward (BidirectionalIterator1 first,
                                       BidirectionalIterator1 last,
                                       BidirectionalIterator2 result);

其中,

  • BidirectionalIterator1:迭代器类型,指向输入范围的起始位置;
  • BidirectionalIterator2:迭代器类型,指向复制目标范围的起始位置;
  • first:定义复制范围的第一个元素的迭代器;
  • last:定义复制范围的尾随元素的迭代器;
  • result:定义目标范围的起始位置的迭代器。

该函数将从[first, last)范围内复制元素到以result为结尾的范围内。例如:

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

int main () {
    std::vector<int> a = {1,2,3,4,5};
    std::vector<int> b(5);
    std::copy_backward(a.begin(), a.end(), b.end());

    std::cout << "a contains:";
    for (auto i: a) {
        std::cout << ' ' << i;
    }
    std::cout << '\n';

    std::cout << "b contains:";
    for (auto i: b) {
        std::cout << ' ' << i;
    }
    std::cout << '\n';

    return 0;
}

该程序输出:

a contains: 1 2 3 4 5
b contains: 1 2 3 4 5

注意,由于copy_backward()函数是从结尾开始复制的,所以复制顺序与输入范围相反。

总结

通过使用copy()copy_backward()函数,我们可以在C++ STL中方便地复制元素范围,无需编写显式的循环语句。以上就是Algorithm.copy()函数的介绍和使用方法,希望能帮助到各位程序员。