Spis treści

Algorytmy copy i copy_n

Funkcja copy kopiuje elementy od pierwszego do ostatniego z kontenera pierwszego wstawiając je od elementu result kontenera docelowego. Używa przypisania

*result = *first, *(result + 1) = *(first + 1) ...

Elementy [first, last) z kontenera wzorcowego zostają skopiowane do elementów [resutl, result + (last-first)) kontenera docelowego.

Analogicznie działa funkcja copy_n, tylko zamiast końca przedziału last pobiera liczbę elementów do skopiowania - n.

Elementy [first, last) z kontenera wzorcowego zostają skopiowane do elementów [resutl, result + n) kontenera docelowego.

Elementy są kopiowane od pierwszego do ostatniego.

Deklaracja

copy w pliku nagłówkowym algorithm:

template <class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first, InputIterator last,
                    OutputIterator result);

copy_n w pliku nagłówkowym algo.h:

template <class InputIterator, class Size, class OutputIterator>
OutputIterator copy_n(InputIterator first, Size count, 
                      OutputIterator result);

Parametry

Wymagania odnośnie parametrów

Zwracana wartość

Funkcja zwraca iterator na pierwszy za ostatnim zmienionm w zbiorze docelowym elementem.

Wymagania na parametryzowane typy

Złożoność

Algorytmy copy i copy_n mają złożoność liniową i równą N lub (last-first).

Przykład użycia

Plik cpp do pobrania copy-copy_n.cpp.

Krótki przykład:

//wektory: v zawiera el. 0-19, v3 zawiera 10 el. 0
//iteratory piaty, dziesiaty, pietnasty - wskazują na konkretne elementy wektora  v
//iterator temp - pomocniczy
 
//Kopiowanie elementów 10-15 z wektora v do el. 0-5 do wektora v3
//i zapisanie w temp iteratora na pierwszy za ostatnim zmienionym elementem w v3
 
temp = copy(dziesiaty, pietnasty, v3.begin());
 
copy(v3.begin(), v3.end(), ostream_iterator<int>(std::cout, " ")); 
cout << endl; 
//10 11 12 13 14 0 0 0 0 0
 
//Kopiowanie 5 elementów od 0 z wektora v do wektora v3 w miejsca od 6
//temp wskazuje na 6ty element v3
copy_n(v.begin(), 5, temp);
 
copy(v3.begin(), v3.end(), ostream_iterator<int>(std::cout, " ")); 
cout << endl;    
//10 11 12 13 14 0 1 2 3 4