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 算法更加严格。 它的输入和输出迭代器都必须是双向的。

在标准模板库算法中,仅 copy_backwardmove_backward 算法使用指向目标范围末尾的迭代器来指定输出范围。

因为此算法会从最后一个元素开始按顺序复制源元素,所以,只要源范围的 _First 位置未包含在目标范围中,目标范围便可能与源范围重叠。 copy_backward 可用来将元素移动到右侧,但不能移动到左侧,除非源范围和目标范围之间不存在重叠。 若要向左移动任意数量的位置,请使用 copy 算法。

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;
}

输出

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

请参见

参考

move_backward

标准模板库