Narzędzia użytkownika

Narzędzia witryny


rotate_rotate_copy

To jest stara wersja strony!


Algorytmy rotate rotate_copy

Algorytmy zamieniają segment zawierający elementy od pierwszego (first) do środkowego – 1 (middle – 1) z segmentem który zawiera elementy od środkowego (middle) do ostatniego (last).

Nagłówek

 #include<algorithm> 

Deklaracje rotate rotate_copy

 template <class ForwardIterator>
void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);
 
template <class ForwardIterator, class OutputIterator>
OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result);

Parametry

Wspólne:

  • first – wskazuje na początek sekwencji wszystkich elementów
  • middle – wskazuje na element rozdzielający dwa segmenty poddane zamianie
  • last – wskazuje na koniec sekwencji wszystkich elementów

rotate_copy:

  • result - wskazuje na kontener do którego zostanie zapisany wynik

Działanie

Rotate zamienia segment zawierający elementy od first do middle – 1 z segmentem który zawiera elementy od middle do last. Po tym jak rotate() zostanie zastosowany element który znajdował się na pozycji middle znajduje się na pozycji first, a pozostałe elementy segmentu (middle , last) znajdują się na tych samych pozycjach względem siebie co wcześniej (np. element middle znajduje się na pozycji first, a element middle + 1 na pozycji first +1). Element który znajdował się na pozycji first teraz znajduje nie na pozycji last – (middle + 1). Podobnie jak w przypadku poprzedniego segmentu elementy zachowują swoją kolejność względem siebie.

Przykład ilustrujący zastosowanie rotate():

2 4 6 8 1 3 5

Jeśli użyjemy funkcji rotate() z argumentem middle = 5, otrzymamy dwa segmenty:

2 4 6 8 	oraz		1 3 5

Po wykonaniu się funkcji otrzymamy sekwencje:

1 2 3 2 4 6 8

Element który znajdował się na piątej pozycji teraz znajduje się na pozycji pierwszej, a element który znajdował się na pozycji pierwszej teraz znajduje się na pozycji czwartej (last – (middle + 1), czyli 8 – 5 + 1 = 4).

Algorytm rotate_copy działa na identycznej zasadzie co powyżej opisany algorytm rotate, lecz zamiast zmieniać oryginalną sekwencji kopiuje wynik do kontenera wskazanego przez argument result. Elementy z zakresu (first, last) są kopiowane do zakresu (result, result + (last – first)).

rotate_rotate_copy.1240909268.txt.gz · ostatnio zmienione: 2009/04/28 11:01 przez tprzedpe