次の方法で共有


copy_backward

要素のソース シーケンスを反復処理し、それらに逆方向の新しい位置を割り当てるソース範囲内から先の範囲に要素の値を割り当てます。

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

パラメーター

  • _First
    ソース範囲内の先頭の要素の位置を示す双方向反復子。

  • _Last
    ソース範囲内の最後の要素を含む 1 である位置を示す双方向反復子。

  • _DestEnd
    割り当て先範囲の最後の要素を含むリストの位置を示す双方向反復子。

戻り値

先の範囲 (つまり、反復子の最後の要素を含む 1 である位置を示す出力反復子アドレスは _ DestEnd – (_Last – _First ) です。

解説

ソース範囲内で有効でない場合、コピーすべての要素を保持するターゲットに十分な領域が必要です。

copy_backward のアルゴリズムは、よりも厳しい要件をコピーのアルゴリズム制限されます。出力反復子は、双方向である必要があります。

copy_backward のアルゴリズムは先の範囲の末尾を指す反復子の出力の範囲を示す唯一の標準テンプレート ライブラリのアルゴリズムです。

アルゴリズムは最後の要素以降順序でソース要素をコピーするため、先の範囲は先の範囲でソース範囲内で指定したソース範囲内の _First の位置を含みません重複できます。ソースとターゲット間の範囲に重複があるcopy_backward が右、左辺に要素の転送に使用できます。左の任意の位置に移動するには、[コピー] アルゴリズムを使用します。

copy_backward のアルゴリズムは先の範囲の要素に新しい値を割り当てる反復子が指す値のみを変更します。これは、新しい要素を使用してを作成し、空のコンテナーに要素を直接挿入できません。

copy_backward 2 に関連する二つの形式があります:

ついては、これらの関数がどのようにするか、チェックを行う反復子を参照してください。

使用例

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

参照

関連項目

標準テンプレート ライブラリ