przejście do zawartości
zpr c++ quick reference
Narzędzia użytkownika
Zarejestruj się!
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Zarejestruj się!
Ostatnie zmiany
Menadżer multimediów
Indeks
Ślad:
lower_bound_upper_bound
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Algorytmy lower_bound oraz upper_bound ====== Funkcje ''//lower_bound//'' oraz ''//upper_bound//'' są standardowymi szablonami funkcji biblioteki "algorithm". Są to algorytmy niezmieniające dla danych posortowanych. ===== Nagłówek algorytmu ===== <code cpp>#include <algorithm></code> ===== Deklaracja ===== ==== lower_bound ==== wersja wykorzystująca "operator<" <code cpp> template <class ForwardIterator, class LessThanComparable> ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, const LessThanComparable& value);</code> wersja wykorzystująca predykat do spełnienia <code cpp> template <class ForwardIterator, class T, class StrictWeakOrdering> ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, const T& value, StrictWeakOrdering comp);</code> ==== upper_bound ==== wersja wykorzystująca "operator<" <code cpp> template <class ForwardIterator, class LessThanComparable> ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, const LessThanComparable& value);</code> wersja wykorzystująca predykat do spełnienia <code cpp> template <class ForwardIterator, class T, class StrictWeakOrdering> ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, const T& value, StrictWeakOrdering comp);</code> ===== Parametry ===== ''//ForwardIterator first//'' - element kolekcji, od którego rozpocznie się wyszukiwanie ''//ForwardIterator last//'' - element kolekcji, który jako pierwszy nie będzie branu pod uwagę przez algorytm ''//const LessThanComparable& value//'' - element wyszukiwany (do wstawienia) ''//StrictWeakOrdering comp//'' - obiekt funkcyjny porównujacy dwa elementy (w przypadku użycia wersji z predykatem) ===== 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ę. ===== Użycie ===== //analogicznie dla// **upper_bound** <code cpp>lower_bound(first, last, value [, comp])</code> 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. 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 ===== Δ Algorytmy wymagają posortowanych zbiorów. Działanie na danych nieposortowanych może być źródłem błędów. Δ Wersja bez predykatu wymaga do działania operator //**<**// dla klasy umieszczonej w zbiorze. Δ 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}}
lower_bound_upper_bound.1240923729.txt.gz
· ostatnio zmienione: 2009/04/28 15:02 przez
jg
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry