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.
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);
Funkcja zwraca iterator na pierwszy za ostatnim zmienionm w zbiorze docelowym elementem.
Algorytmy copy i copy_n mają złożoność liniową i równą N lub (last-first).
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