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
rotate_rotate_copy [2009/04/28 10:52]
tprzedpe
rotate_rotate_copy [2009/04/28 15:07] (aktualna)
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);
                        
Linia 19: Linia 19:
  
 Wspólne: 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
  
- ​* ​first – wskazuje ​na początek sekwencji wszystkich elementów +===== Działanie ===== 
- ​* ​middle ​– wskazuje ​na element ​rozdzielający dwa segmenty ​poddane zamianie + 
- last – wskazuje ​na koniec ​sekwencji ​wszystkich ​elementów+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 3 5 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>​ 
 + 
 +Uzyskany wydruk: 
 + 
 +rotate: 
 + 
 +Elementy przed rotate: 
 +     2 4 6 8 1 3 5 
 + 
 +Elementy po rotate dla middle = 5: 
 +     1 3 5 2 4 6 8
  
 rotate_copy:​ rotate_copy:​
  
- * result - wskazuje na kontener do którego zostanie zapisany wynik+Elementy przed rotate_copy:​ 
 +     2 4 6 8 1 3 5 
 + 
 +Elementy po rotate_copy dla middle = 5: 
 +     ​wektor wejściowy:​ 
 +     2 4 6 8 1 3 5 
 +     ​wektor wyjściowy:​ 
 +     1 3 5 2 4 6 8
  
rotate_rotate_copy.1240908748.txt.gz · ostatnio zmienione: 2009/04/28 10:52 przez tprzedpe