共用方式為


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

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

請參閱

參考

move_backward

標準樣板程式庫