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:45] 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 **//value//** należy podać obiekt klasy elementów zamieszczonych w przeszukiwanym ciągu. | ||
| + | Prosty przykład użycia: | ||
| + | <code cpp>#include <vector> | ||
| + | #include <algorithm> | ||
| + | |||
| + | 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); | ||
| + | return 0; | ||
| + | } | ||
| + | </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 53: | 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}} | ||