📅  最后修改于: 2023-12-03 15:13:55.077000             🧑  作者: Mango
Algorithm.copy()函数是一个STL算法,用于将一个范围内的元素复制到另一个范围中,可以在不重叠的情况下复制。该函数定义如下:
template <class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator 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()函数之外,STL还提供了一个copy_backward()函数,和copy()函数的作用相似,但是复制顺序与copy()函数恰好相反。该函数的定义如下:
template <class BidirectionalIterator1, class BidirectionalIterator2>
BidirectionalIterator2 copy_backward (BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 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()
函数的介绍和使用方法,希望能帮助到各位程序员。