Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

copy_n

函数模板  <algorithm>
template <class InputIterator, class Size, class OutputIterator>
  OutputIterator copy_n (InputIterator first, Size n, OutputIterator result);

复制元素

将以first开始的范围中的前n个元素复制到以result开始的范围中。

如果n是负的,函数什么也不做。

如果范围重叠,result所指向的范围中的一些元素可能具有未定义但有效的值。

这个函数模板的行为相当于:
template<class InputIterator, class Size, class OutputIterator>
  OutputIterator copy_n (InputIterator first, Size n, OutputIterator result)
{
  while (n>0) {
    *result = *first;
    ++result; ++first;
    --n;
  }
  return result;
}

☲  参数


first
指向至少有n个要复制元素的序列的初始位置的输入迭代器。 InputIterator(输入迭代器)应指向一个类型,该类型可赋值给OutputIterator(输出迭代器)所指向的元素。
n
要复制的元素数目。
如果这个值是负的,函数什么也不做。
Size 应(可转换)为整型。
result
指向至少有n个要复制元素的目标序列的初始位置的输出迭代器。
这将不会指向范围[first,last)中的任何元素。

☉  返回值



指向复制元素的目标范围末尾的迭代器。

☣  示例



// copy_n 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;

  myvector.resize(7);   // allocate space for 7 elements

  std::copy_n ( 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

✥ 复杂度



first and last之间的距离是线性的:对范围内的每个元素执行赋值操作。

⇄ 数据竞争


访问first所指向的n个元素范围内的对象(每个对象只访问一次)。
result和返回值之间的对象被修改(每个对象只修改一次)。

☂ 异常安全性



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

🍄  另请参阅



copy_backward 从末尾复制范围的元素(函数模板)
fill 在范围内查找值(函数模板)
replace 从设置的范围查找元素(函数模板)

联系我们 免责声明 关于CandCplus 网站地图