Narzędzia użytkownika

Narzędzia witryny


lower_bound_upper_bound

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
lower_bound_upper_bound [2009/04/28 14:31]
jg
lower_bound_upper_bound [2009/04/28 15:08] (aktualna)
jg
Linia 34: Linia 34:
  
 ''//​ForwardIterator last//'' ​ - element kolekcji, który jako pierwszy nie będzie branu pod uwagę przez algorytm ''//​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 ===== ===== 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 ===== 
 + 
 +<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 ===== 
 +Δ 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.1240921911.txt.gz · ostatnio zmienione: 2009/04/28 14:31 przez jg