Narzędzia użytkownika

Narzędzia witryny


rotate_rotate_copy

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
rotate_rotate_copy [2009/04/28 10:41]
tprzedpe
rotate_rotate_copy [2009/04/28 14:23]
tprzedpe
Linia 9: Linia 9:
 ===== Deklaracje rotate rotate_copy ===== ===== Deklaracje rotate rotate_copy =====
  
-<code cpp> template <class ForwardIterator>​ +<code cpp>​template <class ForwardIterator>​ 
-           ​void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);+void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last);
                        
-           template <class ForwardIterator,​ class OutputIterator>​ +template <class ForwardIterator,​ class OutputIterator>​ 
-           ​OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result);+OutputIterator rotate_copy (ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result); 
 +</​code>​ 
 + 
 +===== 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)). 
 + 
 +===== Przykład użycia ===== 
 + 
 +<code cpp> 
 + #​include <​algorithm>​ 
 + #​include <​vector>​ 
 + #​include <​iostream>​ 
 + 
 + using namespace std; 
 + 
 + int main() 
 + { 
 +    
 +   //​rotate:​ 
 +   cout << "​rotate:"​ << endl << endl; 
 +    
 +   //​Inicjalizacja wektora przy użyciu tablicy int 
 +   int arr[7] = {2,​4,​6,​8,​1,​3,​5};​ 
 +   ​vector<​int>​ v_rotate(arr,​ arr+7); 
 + 
 +   //​Wydruk elementów przed użyciem algorytmu 
 +   cout << "​Elementy przed rotate: " << endl << " ​    ";​ 
 +   for (int i = 0; i < 7; i++) 
 +   { 
 +     cout << v_rotate[i] << " "; 
 +   } 
 +   cout << endl << endl; 
 +   // Wydruk: 2 4 6 8 1 3 5 
 + 
 +   //​Rotacja 
 +   ​rotate(v_rotate.begin(),​ v_rotate.begin()+4,​ v_rotate.end());​ 
 + 
 +   //​Wydruk elementów po użyciu algorytmu 
 +   cout << "​Elementy po rotate dla middle = 5: " << endl << " ​    ";​ 
 +   for (int i = 0; i < 7; i++) 
 +   { 
 +     cout << v_rotate[i] << " "; 
 +   } 
 +   cout << endl << endl; 
 +   // Wydruk: 1 3 5 2 4 6 8 
 +    
 +   //​rotate_copy:​ 
 +   cout << "​rotate_copy:"​ << endl << endl; 
 +    
 +   //​Inicjalizacja wektora przy użyciu tablicy int 
 +   ​vector<​int>​ v_rotate_copy1(arr,​ arr+7); 
 +    
 +   //​Inicjalizacja wektora pustego 
 +   ​vector<​int>​ v_rotate_copy2(7);​ 
 +    
 +   //​Wydruk elementów przed użyciem algorytmu 
 +   cout << "​Elementy przed rotate_copy:​ " << endl << " ​    ";​ 
 +   for (int i = 0; i < 7; i++) 
 +   { 
 +     cout << v_rotate_copy1[i] << " "; 
 +   } 
 +   cout << endl << endl; 
 +   // Wydruk: 2 4 6 8 1 3 5 
 +    
 +   //​Rotacja 
 +   ​rotate_copy(v_rotate_copy1.begin(),​ v_rotate_copy1.begin()+4,​ v_rotate_copy1.end(),​ v_rotate_copy2.begin());​ 
 +    
 +   //​Wydruk elementów po użyciu algorytmu 
 +   cout << "​Elementy po rotate_copy dla middle = 5: " << endl << " ​    ";​ 
 +   cout << "​wektor wejściowy:"​ << endl << " ​    ";​ 
 +   for (int i = 0; i < 7; i++) 
 +   { 
 +     cout << v_rotate_copy1[i] << " "; 
 +   } 
 +   cout << endl << " ​    ";​ 
 +   // Wydruk 2 4 6 8 1 3 5 
 +   cout << "​wektor wyjściowy:"​ << endl << " ​    ";​ 
 +   for (int i = 0; i < 7; i++) 
 +   { 
 +     cout << v_rotate_copy2[i] << " "; 
 +   } 
 +   cout << endl << endl; 
 +   // Wydruk: 1 3 5 2 4 6 8 
 +    
 +   ​return 0; 
 + }
 </​code>​ </​code>​
rotate_rotate_copy.txt · ostatnio zmienione: 2009/04/28 15:07 przez tprzedpe