copy
Weist die Werte von Elementen von einem Quellbereich einem Zielbereich zu, durchläuft der Quellelementsequenz durch und vorwärts weist sie 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 adressiert._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, behandelt, die eine hinter dem letzten Element im Zielbereich d. h der Iterator ist, behandelt _Result + (_Last - _First ).
Hinweise
Der Quellbereich muss gültig sein, und es muss genügend Speicherplatz am Ziel zur Verfügung stehen, um alle kopierten Elemente aufzunehmen.
Da der Algorithmus die Quellelemente im Reihenfolgenanfang mit dem ersten Element kopiert, kann sich der Zielbereich mit dem Quellbereich überschneiden kann die Position des _Last Quellbereichs wird nicht im Zielbereich enthalten. copy kann verwendet werden, um Elemente rechts nach links nicht jedoch verschieben, es sei denn, es keine Überlappung zwischen der Quelle und den Zielbereichen gibt. Um rechts eine Zahl Positionen zu verschieben, verwenden Sie den copy_backward - Algorithmus.
Der copy Algorithmus ändert nur die Werte, die auf den von Iteratoren dargestellt werden und weist neuen Werte zu Elementen im Zielbereich zu. Es können keine neuen Elemente erstellt und keine Elemente direkt in einen leeren Container eingefügt werden.
copy verfügt über zwei verknüpfte Formulare:
Informationen über das Verhalten dieser Funktionen 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.
Ausgabe
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