function template
<algorithm>

std::copy

template <class InputIterator, class OutputIterator>  OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);
复制元素范围
将范围 [first,last) 中的元素复制到以 result 开头的范围。

该函数返回一个指向目标范围结束处的迭代器(该迭代器指向最后一个被复制元素的下一个元素)。

范围不能重叠,以至于 result 指向范围 [first,last) 中的某个元素。 对于这种情况,请参见 copy_backward

此函数模板的行为等同于
1
2
3
4
5
6
7
8
9
template<class InputIterator, class OutputIterator>
  OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
  while (first!=last) {
    *result = *first;
    ++result; ++first;
  }
  return result;
}

参数

first, last
输入迭代器,指向要复制的序列的起始和结束位置。范围为 [first,last),其中包含 firstlast 之间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。
result
输出迭代器,指向目标序列的起始位置。
此迭代器不应指向范围 [first,last) 中的任何元素。

返回值

一个指向已复制元素的目标范围结束处的迭代器。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// copy algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::copy
#include <vector>       // std::vector

int main () {
  int myints[]={10,20,30,40,50,60,70};
  std::vector<int> myvector (7);

  std::copy ( myints, myints+7, myvector.begin() );

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it = myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;

  std::cout << '\n';

  return 0;
}

输出
myvector contains: 10 20 30 40 50 60 70


复杂度

线性时间复杂度,复杂度与 firstlast 之间的 距离 成正比:对范围中的每个元素执行一次赋值操作。

数据竞争

范围 [first,last) 中的对象将被访问(每个对象恰好访问一次)。
result 和返回的迭代器之间的范围内的对象将被修改(每个对象恰好被修改一次)。

异常

如果元素赋值或迭代器操作抛出异常,则会抛出异常。
请注意,无效参数会导致未定义行为

另见