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

std::

rotate_copy

函数模板  <algorithm>
template <class ForwardIterator, class OutputIterator>
  OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle,
                              ForwardIterator last, OutputIterator result);

复制并旋转元素

将范围[first,last)中的元素复制到从result开始的范围, 但是旋转元素的顺序,使middle 指向的元素成为结果范围中的第一个元素。

这个函数模板的行为相当于:
template <class ForwardIterator, class OutputIterator>
  OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle,
                              ForwardIterator last, OutputIterator result)
{
  result=std::copy (middle,last,result);
  return std::copy (first,middle,result);
}

☲  参数


first, last
指向要向左旋转的序列的初始和最终位置的前向迭代器。 使用的范围是[first,last), 它包含first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。

middle
指向[first,last)范围内被复制为结果范围中的第一个位置的元素的前向迭代器。

result
指向存储旋转结果范围的初始位置的元素的输出迭代器。
指定类型应该支持在[first,last)范围内分配元素的值.
范围不得重叠。

☉  返回值



指向复制结果范围end的输出迭代器。

☣  示例



// rotate_copy algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::rotate_copy
#include <vector>       // std::vector

int main () {
  int myints[] = {10,20,30,40,50,60,70};

  std::vector<int> myvector (7);

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

  // print out content:
  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: 40 50 60 70 10 20 30

✥ 复杂度



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

⇄ 数据竞争


访问[first,last)范围内的对象。
结果和返回值之间的对象被修改。
每个对象只被访问一次。

☂ 异常安全性



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

🍄  另请参阅



rotate 旋转元素(函数模板)
reverse 复制并反转元素(函数模板)
random_shuffle 随机重新排列范围内的元素(函数模板)
copy 复制范围的元素(函数模板)

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