Freigeben über


copy_backward

Weist die Werte der Elemente eines Quellbereich zu einem Zielbereich zu, durchläuft die Quellfolge von - rückwärts durch und weist ihnen neue Positionen zu.

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

Parameter

  • _First
    Ein bidirektionaler Iterator, der die Position des ersten Elements im Quellbereich behandelt.

  • _Last
    Ein bidirektionaler Iterator, der die Position behandelt, die eine hinter dem letzten Element im Quellbereich ist.

  • _DestEnd
    Ein bidirektionaler Iterator, der die Position von der hinter dem letzten Element im Zielbereich behandelt.

Rückgabewert

Ein Ausgabeiterator, der die Position abweicht, die eine hinter dem letzten Element im Zielbereich h. der Iterator ist, behandelt *_DestEnd *- (_Last - _First ).

Hinweise

Der Quellbereich muss gültig sein und muss genügend Speicherplatz am Ziel geben, um alle Elemente enthalten, die kopiert werden.

Der copy_backward Algorithmus erzwingt wird Anforderungen als diese der Kopienalgorithmus auf.müssen Eingabe und Ausgabeiteratoren bidirektional sein.

Der copy_backward Algorithmus ist der einzige Standardvorlagenbibliotheksalgorithmus, der den Ausgabebereich mit einem Iterator festlegt, der am Ende des Zielbereichs zeigt.

Da der Algorithmus die Quellelemente im Reihenfolgenanfang mit dem letzten Element kopiert, kann der Zielbereich mit dem Quellbereich überlappen kann die _First Position des Quellbereichs wird nicht im Zielbereich enthalten.copy_backward kann verwendet werden, um Elemente nach links das Recht jedoch nicht zu verschieben, es sei denn, es keine Überlappung zwischen der Quelle und den Zielbereichen gibt.So Linksruck verwenden eine beliebige Anzahl Positionen, den Kopie Algorithmus.

Der copy_backward Algorithmus ändert nur die Werte, die von den Iteratoren angezeigt werden und weist neue Werte von Elementen im Zielbereich zu.Er kann nicht verwendet werden, um neue Elemente zu erstellen und kann nicht Einsatzelemente in einen Leercontainer direkt.

copy_backward hat zwei verknüpfte Formulare:

Informationen darüber, wie diese Funktionen verhalten, finden Sie unter Überprüfte Iteratoren.

Beispiel

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

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

Standardvorlagenbibliothek