Narzędzia użytkownika

Narzędzia witryny


copy_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) ...

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

  • first - iterator wskazujący na pierwszy element do kopiowania z kontenera
  • last - iterator na jeden element za ostatnim do kopiowania z kontenera
  • result - iterator na pierwszy element docelowego kontenera
  • count - liczba elementów do skopiowania

Wymagania odnośnie parametrów

  • n >= 0 * [first, last) jest poprawnym przedziałem
  • [first, last) nie nachodzi na result. Jeśli nachodzi to wynik może być inny niż zamierzenia autora. Elementy są kopiowane od pierwszego do ostatniego, więc ostatnie elementy będą niepoprawne.
  • [result, result + n) lub [result, result + (last-first) ) są poprawnymi przedziałami

Zwracana wartość

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

Wymagania na parametryzowane typy

  • InputIterator - iterator z funkcją pre i postinkrementacji a także wyłuskania wskazywanego elementu do odczytu
  • 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ść

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
copy_copy_n.txt · ostatnio zmienione: 2009/04/30 04:24 przez jan_dudziec