Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision | ||
rotate_rotate_copy [2009/04/28 11:01] 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 40: | Linia 40: | ||
Po wykonaniu się funkcji otrzymamy sekwencje: | Po wykonaniu się funkcji otrzymamy sekwencje: | ||
- | 1 2 3 2 4 6 8 | + | 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). | 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)). | 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: | ||
+ | |||
+ | 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 | ||
+ |