Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lower_bound_upper_bound [2009/04/28 14:56] jg |
lower_bound_upper_bound [2009/04/28 15:08] (aktualna) jg |
||
---|---|---|---|
Linia 40: | Linia 40: | ||
===== Wartość zwracana ===== | ===== Wartość zwracana ===== | ||
- | W wyniku działania obu funkcji zwracany jest iterator wskazujący na element zadanego zbioru. W wypadku "lower_bound" wskazywana jest pierwsza pozycja, na ktorą należy wstawić zadany element, aby nie zaburzyć posortowanego ciągu. "upper_bound" zwraca ostatnią taką pozycję. | + | W wyniku działania obu funkcji zwracany jest iterator wskazujący na element badanego zbioru. W wypadku "lower_bound" wskazywana jest pierwsza pozycja, na ktorą należy wstawić zadany element, aby nie zaburzyć posortowanego ciągu. "upper_bound" zwraca ostatnią taką pozycję. |
===== Użycie ===== | ===== Użycie ===== | ||
- | //analogicznie dla// **upper_bound** | ||
<code cpp>lower_bound(first, last, value [, comp])</code> | <code cpp>lower_bound(first, last, value [, comp])</code> | ||
+ | //analogicznie dla// **upper_bound** | ||
- | Algorytm przeszukuje dane w zakresie **[first;last)**. Dla poprawnego działania należy podać iteratory na pierwszy element ciągu przeszukiwanego oraz na pierwszy element za ostatnim do przeszukiwania. Jako wartość **//value//** należy podać obiekt klasy elementów zamieszczonych w przeszukiwanym ciągu. | + | Algorytm przeszukuje dane w zakresie **[first;last)**. Dla poprawnego działania należy podać iteratory na pierwszy element ciągu przeszukiwanego oraz na pierwszy element za ostatnim do przeszukiwania. Jako **//value//** należy podać obiekt klasy elementów zamieszczonych w przeszukiwanym ciągu. |
Prosty przykład użycia: | Prosty przykład użycia: | ||
- | <code cpp> #include <vector> | + | <code cpp>#include <vector> |
#include <algorithm> | #include <algorithm> | ||
Linia 62: | Linia 62: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | Wersja z predykatem wymaga podania jako czwartego argumentu obiektu funkcyjnego służącego do porównywania danych obiektów. Przykład użycia: | ||
+ | <code cpp>#include <vector> | ||
+ | #include <algorithm> | ||
+ | |||
+ | |||
+ | class rowne | ||
+ | { | ||
+ | public: | ||
+ | bool operator()(const int &a, const int &b) | ||
+ | { | ||
+ | return ( a < b) ? true : false; | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | std::vector<int> liczby; | ||
+ | for(int i=0;i<10;++i) | ||
+ | liczby.push_back(i); | ||
+ | std::vector<int>::iterator iter; | ||
+ | iter = lower_bound(liczby.begin(),liczby.end(),3,rowne()); | ||
+ | return 0; | ||
+ | }</code> | ||
===== Ostrzeżenie ===== | ===== Ostrzeżenie ===== | ||
Linia 69: | Linia 93: | ||
Δ Wersja z predykatem wymaga danych posortowanych przy użyciu tego predykatu. | Δ Wersja z predykatem wymaga danych posortowanych przy użyciu tego predykatu. | ||
+ | |||
+ | ===== Przykładowy program wykorzystujący algorytmy upper_bound oraz lower_bound ===== | ||
+ | {{upper_lower_bound.cpp}} |