====== Algorytm min_element max_element ======
**min_element** i **max_element** to algorytmy zwracające najmniejszy/największy element z zakresu [firstElement, lastElement). firstElement i lastElement są iteratorami wskazującymi na pozycję w kontenerze (np. listy, wektora). Porównywanie jest realizowane jest za pomocą domyślnego (wbudowanego) operatora mniejszości < . Dodatkowo możliwe jest podanie jako trzeciego parametru funkcji w roli operatora <, która będzie użyta do znalezienia najmniejszego/największego elementu. Funkcja ta zwraca //true// jeżeli jej __pierwszy parametr__ jest mniejszy od __drugiego parametru__.
===== Deklaracja =====
W pliku nagłówkowym algorithm
**min_element**, Pierwsza wersja przyjmuje jako parametr zakres:
template
ForwardIterator min_element ( ForwardIterator first, ForwardIterator last );
Druga wersja przyjmuje jako parametr zakres i operator porównujący:
template
ForwardIterator min_element ( ForwardIterator first, ForwardIterator last,
Compare comp );
**max_element**, Pierwsza wersja przyjmuje jako parametr zakres:
template
ForwardIterator max_element ( ForwardIterator first, ForwardIterator last );
Druga wersja przyjmuje jako parametr zakres i operator porównujący:
template
ForwardIterator max_element ( ForwardIterator first, ForwardIterator last,
Compare comp );
Równoważny kod:
template
ForwardIterator min_element ( ForwardIterator first, ForwardIterator last )
{
ForwardIterator lowest= first;
if (first==last) return last;
while (++first!=last)
if (*first<*lowest) // or: if (comp(*first,*lowest)) for the comp version
lowest=first;
return lowest;
}
===== Parametry =====
* **first, last** - Iteratory wskazujące z jakiego zakresu wyszukiwany będzie najmniejszy/największy element. Zakres to [first, last), co oznacza że zawiera on wszystkie elementy rozpoczynając od elementu first do elementu poprzedzającego last.
* **comp** - funkcja realizująca operator mniejszości <. Jako argumenty przyjmuje element pierwszy i element drugi. Zwraca **true** jeżeli //element pierwszy// jest mniejszy niż //element drugi//.
===== Zwracana wartość =====
Iterator wskazujący na element najmniejszy/największy
===== Ograniczenia =====
* W podanym zakresie [first, last) powinien znajdować się co najmniej jeden element
* Jeżeli first==last zwracany jest last
* Jeżeli jest kilka elementów najmniejszych/największych zwracany jest ten, który występuje wcześniej w kontenerze
===== Złożoność =====
Liniowa: wykonuje operacje porównania n-1 razy, gdzie n to ilość elementów w zakresie