copy_backward

和的源范围为目标范围,循环元素源序列并将它们分配在一个反向推理的元素的值的新位置。

template<class BidirectionalIterator1, class BidirectionalIterator2>
   BidirectionalIterator2 copy_backward(
      BidirectionalIterator1 _First, 
      BidirectionalIterator1 _Last,
      BidirectionalIterator2 _DestEnd
   );

参数

  • _First
    解析一双向的迭代器第一个元素的位置位于源范围。

  • _Last
    解析一双向的迭代器是一个通过在源范围的最终元素的位置。

  • _DestEnd
    解析一双向的迭代器位置一个通过最终元素在目标范围。

返回值

解决输出的迭代器是一个通过在目标范围,也就是说,迭代器的最终元素的位置解决 *_DestEnd *(_Last – _First )。

备注

源范围必须是有效的,且必须具有足够的空间用于保存所有元素的为目标复制。

copy_backward 算法比该这种更严格的要求复制算法。 其输入和输出迭代器必须是双向的。

copy_backward 算法是指定与迭代的唯一标准模板库算法输出范围指向目标范围的末尾。

由于算法从最后一个元素开始复制源元素顺序,目标范围可以与源范围重叠提供的源范围的 _First 位置在目标范围不包含。 除非没有在源和目标范围之间切换,的重叠copy_backward 可用于将元素添加到右侧,而不是左侧。 若要转移到左侧任意数量的位置,请使用 复制 算法。

copy_backward 算法只修改值指向由迭代器,将新值赋给在目标范围的元素。 它不能用于创建新的组件并不能直接插入元素为空的容器。

copy_backward 有两个相关的窗体:

有关这些功能如何的信息的行为,请参见 经过检查的迭代器

示例

// alg_copy_bkwd.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
   using namespace std;
   vector <int> v1, v2;
   vector <int>::iterator Iter1, Iter2;

   int i;
   for ( i = 0 ; i <= 5 ; i++ )
      v1.push_back( 10 * i );

   int ii;
   for ( ii = 0 ; ii <= 10 ; ii++ )
      v2.push_back( 3 * ii );

   cout << "v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   cout << "v2 = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   // To copy_backward the first 3 elements of v1 into the middle of v2
   copy_backward( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 7 );

   cout << "v2 with v1 insert = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")" << endl;

   // To shift the elements inserted into v2 two positions
   // to the right
   copy_backward( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 9 );

   cout << "v2 with shifted insert = ( " ;
   for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
      cout << *Iter2 << " ";
   cout << ")" << endl;
}

Output

v1 = ( 0 10 20 30 40 50 )
v2 = ( 0 3 6 9 12 15 18 21 24 27 30 )
v2 with v1 insert = ( 0 3 6 9 0 10 20 21 24 27 30 )
v2 with shifted insert = ( 0 3 6 9 0 10 0 10 20 27 30 )

要求

标头: <algorithm>

命名空间: std

请参见

参考

标准模板库