====== Algorytm reverse & reverse_copy ======
Zaliczane są do rodziny algorytmów **mutujących** biblioteki standardowej C++.\\
== reverse ==
* odwraca kolejność elementów wewnątrz podanego zakresu\\
* //std::list// udostępnia funkcję składową //reverse//, oferującą lepszą wydajność
(modyfikowane są jedynie powiązania wskaźników wewnątrz listy)
== reverse_copy ==
* odwraca kolejność elementów podczas kopiowania z zakresu źródłowego\\
===== Nagłówek =====
#include
dla iteratorów wstawiających:
#include
===== Definicje =====
== reverse ==
template
void reverse ( BidirectionalIterator first, BidirectionalIterator last )
{
while ((first!=last)&&(first!=--last))
swap (*first++,*last);
}
== reverse_copy ==
template
OutputIterator reverse_copy ( BidirectionalIterator first,
BidirectionalIterator last, OutputIterator result )
{
while (first!=last) *result++ = *--last;
return result;
}
===== Parametry =====
== reverse ==
first - początek zakresu źródłowego
last - koniec zakresu źródłowego
== reverse_copy ==
first - początek zakresu źródłowego
last - koniec zakresu źródłowego
result - iterator wyjściowy wskazujący miejsce zapisu
===== Wartość zwracana =====
== reverse ==
brak
== reverse_copy ==
pozycja za ostatnim elementem w kolekcji docelowej:
result + (last - first)
===== Warunki użycia =====
* zakres [first, last) jest prawidłowy\\
* //reverse_copy//: w kontenerze docelowym zapewniona jest odpowiednio duża ilość miejsca lub używane są iteratory wstawiające\\
* //reverse_copy//: zakres źródłowy i docelowy nie zachodzą na siebie
===== Złożoność =====
**reverse**: liniowa, N/2 zamian\\
**reverse_copy**: liniowa, N przypisań
===== Przykłady użycia =====
== stworzenie kolekcji ==
using namespace std;
...
vector quote_vector;
vector num_vector;
list quote_list;
const int nums[] = { 1, 2, 3, 4, 5 };
quote_vector.push_back("przyklad");
quote_vector.push_back("reverse");
quote_vector.push_back("i");
quote_vector.push_back("reverse_copy");
quote_list.push_back("kolejny");
quote_list.push_back("przyklad");
quote_list.push_back("dla");
quote_list.push_back("listy");
== reverse ==
/* odwrócenie wybranego zakresu elementów */
reverse(quote_vector.begin() + 1, quote_vector.end());
/* użycie optymalnej wersji algorytmu dla listy */
quote_list.reverse();
== reverse_copy ==
/* odwrócona kopia wybranego zakresu elementów,
z wykorzystaniem iteratora, wstawiającego elementy
na koniec kolejki */
reverse_copy(quote_vector.begin(), quote_vector.end() - 1,
back_inserter(quote_list));
/* użycie algorytmu bez iteratorów wstawiających
- kontener docelowy musi zapewnić odpowiednią ilość
miejsca */
num_vector.reserve(5);
reverse_copy(nums, nums + 5, num_vector.begin());