Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision | ||
copy_copy_n [2009/04/30 04:09] jan_dudziec |
copy_copy_n [2009/04/30 04:24] (aktualna) jan_dudziec |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== Algorytmy copy i copy_n ====== | ====== 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) ... | + | Funkcja **copy** kopiuje elementy od pierwszego do ostatniego z kontenera pierwszego wstawiając je od elementu result kontenera docelowego. Używa przypisania |
+ | <code cpp>*result = *first, *(result + 1) = *(first + 1) ...</code> | ||
Elementy [first, last) z kontenera wzorcowego zostają skopiowane do elementów [resutl, result + (last-first)) kontenera docelowego. | 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. | + | 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 [first, last) z kontenera wzorcowego zostają skopiowane do elementów [resutl, result + n) kontenera docelowego. | ||
Linia 25: | Linia 26: | ||
===== Parametry ===== | ===== Parametry ===== | ||
- | * **first** - iterator wskazujący na pierwszy element do kopiowania z kontenera | + | * **first** - iterator wskazujący na pierwszy element do kopiowania z kontenera |
- | * **last** - iterator na jeden element za ostatnim do kopiowania z kontenera | + | * **last** - iterator na jeden element za ostatnim do kopiowania z kontenera |
- | * **result** - iterator na pierwszy element docelowego kontenera | + | * **result** - iterator na pierwszy element docelowego kontenera |
- | * **count** - liczba elementów do skopiowania | + | * **count** - liczba elementów do skopiowania |
===== Wymagania odnośnie parametrów ===== | ===== Wymagania odnośnie parametrów ===== | ||
Linia 40: | Linia 41: | ||
===== Wymagania na parametryzowane typy ===== | ===== Wymagania na parametryzowane typy ===== | ||
- | * InputIterator | + | * InputIterator - iterator z funkcją pre i postinkrementacji a także wyłuskania wskazywanego elementu do odczytu |
- | * OutputIterator | + | * OutputIterator - iterator z funkcją pre i postinkrementacji a także nadpisania wskazywanego obiektu operatorem '='. |
+ | * InsertIterator - przykład OutputIterator, który tworzy nowy element w kontenerze gdy zostanie na nim wywołany operator przyrównania. Uzycie tego operatora pozwala kopiować elementy do pustych kontenerów. | ||
===== Złożoność ===== | ===== Złożoność ===== | ||
Linia 47: | Linia 49: | ||
===== Przykład użycia ===== | ===== Przykład użycia ===== | ||
+ | Plik cpp do pobrania {{copy-copy_n.cpp}}. | ||
- | } | + | Krótki przykład: |
+ | <code cpp> | ||
+ | //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 | ||
</code> | </code> |