Difference between revisions of "cpp/algorithm/min element"
m (Text replace - "/sidebar" to "/navbar") |
m (Text replace - "{{eq fun cpp" to "{{eq fun") |
||
Line 29: | Line 29: | ||
===Possible implementation=== | ===Possible implementation=== | ||
− | {{eq fun | + | {{eq fun |
| 1= | | 1= | ||
template<class ForwardIterator> | template<class ForwardIterator> |
Revision as of 04:11, 3 July 2012
Template:ddcl list begin <tr class="t-dsc-header">
<td><algorithm>
<td></td> <td></td> </tr> <tr class="t-dcl ">
<td >ForwardIterator min_element( ForwardIterator first, ForwardIterator last );
<td > (1) </td> <td class="t-dcl-nopad"> </td> </tr> <tr class="t-dcl ">
<td >ForwardIterator min_element( ForwardIterator first, ForwardIterator last,
<td > (2) </td> <td class="t-dcl-nopad"> </td> </tr> Template:ddcl list end
Finds the smallest element in the range [first, last)
. The first version uses operator< to compare the values, the second version uses the given comparison function comp
.
Contents |
Parameters
first, last | - | forward iterators defining the range to examine |
cmp | - | comparison function object (i.e. an object that satisfies the requirements of Compare) which returns true if if *a is less than *b .The signature of the comparison function should be equivalent to the following: bool cmp(const Type1& a, const Type2& b); While the signature does not need to have const&, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) |
Return value
Iterator to the smallest element in the range [first, last)
. If several elements in the range are equivalent to the smallest element, returns the iterator to the first such element. Returns last
if the range is empty.
Complexity
Exactly max(N-1,0) comparisons, where N = std::distance(first, last).
Possible implementation
First version |
---|
template<class ForwardIterator> ForwardIterator min_element(ForwardIterator first, ForwardIterator last) { if (first == last) return last; ForwardIterator smallest = first; ++first; for (; first != last; ++first) { if (*first < *smallest) { smallest = first; } } return smallest; } |
Second version |
template<class ForwardIterator, class Compare> ForwardIterator min_element(ForwardIterator first, ForwardIterator last, Compare comp) { if (first == last) return last; ForwardIterator smallest = first; ++first; for (; first != last; ++first) { if (comp(*first, *smallest)) { smallest = first; } } return largest; } |
Example
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> v{3, 1, 4, 1, 5, 9}; std::vector<int>::iterator result = std::min_element(v.begin(), v.end()); std::cout << "min element at: " << std::distance(v.begin(), result); }
Output:
min element at: 1