copy
Przypisuje wartości elementów z zakresu źródłowego do zakresu docelowego, iteracji w sekwencji źródłowej elementów oraz przypisywanie im nowych stanowisk w kierunku do przodu.
template<class InputIterator, class OutputIterator>
OutputIterator copy(
InputIterator _First,
InputIterator _Last,
OutputIterator _DestBeg
);
Parametry
_First
Iterator danych wejściowych, odnoszący się do pozycji pierwszego elementu w zakresie źródłowym._Last
Wejściowy sterująca zajęcie stanowiska, które jest jednym przeszłości ostatniego elementu w zakresie źródłowym._DestBeg
Dane wyjściowe iterację adresowania położenie pierwszego elementu w zakresie docelowym.
Wartość zwracana
Iterację wyjście zajęcie stanowiska, które jest jeden obok ostatniego elementu w zakresie docelowym, to znaczy, adresy sterująca _Result + (_Last - _First ).
Uwagi
Zakres źródłowy musi być prawidłowy i musi być wystarczająco dużo miejsca w miejscu przeznaczenia, aby pomieścić wszystkie elementy kopiowane.
Ponieważ algorytm kopiuje elementy źródła w kolejności od pierwszego elementu, zakres docelowy może pokrywać się z zakresu Yródłowego, pod warunkiem, _Last pozycji zakres źródłowy nie jest zawarty w zakresie docelowym.Kopiuj służy do zmiany elementów do lewej, ale nie po prawej stronie, chyba że nie ma żadnych nakładania się zakresów źródłowych i docelowych.Przesunięcie w prawo w dowolnej liczby stanowisk, użyj copy_backward algorytm.
Kopię algorytm modyfikuje tylko wartości wskazywanej przez Iteratory, przypisywanie nowych wartości do elementów w zakresie docelowym.Nie może służyć do tworzenia nowych elementów i nie może bezpośrednio wstawiać elementów do pustego kontenera.
copy ma dwa powiązane formularze:
Aby uzyskać informacje o zachowaniu tych funkcji, zobacz Zaznaczone iteratory.
Przykład
// 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;
}
Przykładowe innego przedstawiająca sposób używania kopii, zobacz accumulate, copy oraz vector::push_back.
Dane wyjściowe
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 )
Wymagania
Nagłówek: <algorytm>
Przestrzeń nazw: std