| |
|
Category: algorithms | | Component type: function |
Prototype
Min_element
is an overloaded name; there are actually two min_element
functions.
template <class ForwardIterator>
ForwardIterator min_element(ForwardIterator first, ForwardIterator last);
template <class ForwardIterator, class BinaryPredicate>
ForwardIterator min_element(ForwardIterator first, ForwardIterator last,
BinaryPredicate comp);
Description
Min_element
finds the smallest element in the range [first, last)
. It returns the first iterator i
in [first, last)
such that no other iterator in [first, last)
points to a value smaller than *i
. The return value is last
if and only if [first, last)
is an empty range.
The two versions of min_element
differ in how they define whether one element is less than another. The first version compares objects using operator<
, and the second compares objects using a functors comp
.
The first version of min_element
returns the first iterator i
in [first, last)
such that, for every iterator j
in [first, last)
, *j < *i
is false
. The second version returns the first iterator i
in [first, last)
such that, for every iterator j
in [first, last)
, comp(*j, *i)
is false
.
Definition
Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.
Requirements on types
For the first version:
For the second version:
-
ForwardIterator
is a model of ForwardIterator.
-
BinaryPredicate
is a model of BinaryPredicate.
-
ForwardIterator
's value type is convertible to BinaryPredicate
's first argument type and second argument type.
Preconditions
-
[first, last)
is a valid range.
Complexity
Linear. Zero comparisons if [first, last)
is an empty range, otherwise exactly (last - first) - 1
comparisons.
Example
int main()
{
List<int> L;
generate_n(front_insert_iterator(L), 1000, rand);
list<int>::const_iterator it = min_element(L.begin(), L.end());
cout << "The smallest element is " << *it << endl;
}
Notes
See also
min
, max
, max_element
, LessThanComparable, sort
, nth_element