copy
Weist die Werte der Elemente eines Quellbereich zu einem Zielbereich zu, durchläuft die Quellfolge von gelöschte durch und ggf. weist ihnen neue Positionen zu.
template<class InputIterator, class OutputIterator>
OutputIterator copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _DestBeg
);
Parameter
_First
Ein Eingabeiterator, der die Position des ersten Elements im Quellbereich behandelt._Last
Ein Eingabeiterator, der die Position behandelt, die eine hinter dem letzten Element im Quellbereich ist._DestBeg
Ein Ausgabeiterator, der die Position des ersten Elements im Zielbereich behandelt.
Rückgabewert
Ein Ausgabeiterator, der die Position abweicht, die eine hinter dem letzten Element im Zielbereich h. der Iterator ist, behandelt _Result + (_Last - _First ).
Hinweise
Der Quellbereich muss gültig sein und muss genügend Speicherplatz am Ziel geben, um alle Elemente enthalten, die kopiert werden.
Da der Algorithmus die Quellelemente im Reihenfolgenanfang mit dem ersten Element kopiert, kann der Zielbereich mit dem Quellbereich überlappen kann die _Last Position des Quellbereichs wird nicht im Zielbereich enthalten.copy kann verwendet werden, um Elemente rechts nach links jedoch nicht zu verschieben, es sei denn, es keine Überlappung zwischen der Quelle und den Zielbereichen gibt.Um rechts eine beliebige Anzahl Positionen zu verschieben, verwenden Sie den copy_backward Algorithmus.
Der copy 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 hat zwei verknüpfte Formulare:
Informationen darüber, wie diese Funktionen verhalten, finden Sie unter Überprüfte Iteratoren.
Beispiel
// alg_copy.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 the first 3 elements of v1 into the middle of v2
copy( v1.begin( ), v1.begin( ) + 3, v2.begin( ) + 4 );
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 left
copy( v2.begin( )+4, v2.begin( ) + 7, v2.begin( ) + 2 );
cout << "v2 with shifted insert = ( " ;
for ( Iter2 = v2.begin( ) ; Iter2 != v2.end( ) ; Iter2++ )
cout << *Iter2 << " ";
cout << ")" << endl;
}
Eine andere Beispielvertretung, wie Kopie, finden Sie unter accumulate, copy, und vector::push_back verwendet.
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 0 10 20 10 20 21 24 27 30 )
Anforderungen
Header: <algorithm>
Namespace: std