## min_element

    Algorithm

- Summary
- Data Type and Member Function Indexes
- Synopsis
- Description
- Complexity
- Example
- Warnings
- See Also

### Summary

Finds the minimum value in a range.

### Data Type and Member Function Indexes
(exclusive of constructors and destructors)

None

### Synopsis

    #include <algorithm>
    template <class ForwardIterator>
     ForwardIterator
     min_element(ForwardIterator first, ForwardIterator last);

    template <class ForwardIterator, class Compare>
     InputIterator
     min_element(ForwardIterator first, ForwardIterator last,
                 Compare comp);

### Description

The min_element algorithm returns an iterator that denotes the minimum element in a sequence. If the sequence contains more than one copy of the minimum element, the iterator points to the first occurrence of the element. In the second version of the function, the optional argument `comp` defines a comparison function that can be used in place of the default `operator<`.

Algorithm min_element returns the first iterator `i` in the range `[first, last)` such that for any iterator `j` in the same range, the following corresponding conditions hold:

`!(*j < *i)`

or

`comp(*j, *i) == false.`

### Complexity

min_element performs exactly `max((last - first) - 1, 0)` applications of the corresponding comparisons.

### Example

    //
    // max_elem.cpp
    //
     #include <algorithm>
     #include <vector>
     #include <iostream>
     using namespace std;

     int main(void)
     {
       typedef vector<int>::iterator iterator;
       int d1[5] = {1,3,5,32,64};

       // set up vector
       vector<int>      v1(d1,d1 + 5);

       // find the largest element in the vector
       iterator it1 = max_element(v1.begin(), v1.end());
       // it1 = v1.begin() + 4

       // find the largest element in the range from
       // the beginning of the vector to the 2nd to last
       iterator it2 = max_element(v1.begin(), v1.end()-1,
                          less<int>());
       // it2 = v1.begin() + 3

       // find the smallest element
       iterator it3 = min_element(v1.begin(), v1.end());
       // it3 = v1.begin()

       // find the smallest value in the range from
       // the beginning of the vector plus 1 to the end
       iterator it4 = min_element(v1.begin()+1, v1.end(),
                          less<int>());
       // it4 = v1.begin() + 1

       cout << *it1 << " " << *it2 << " "
            << *it3 << " " << *it4 << endl;

       return 0;
     }

Program Output

    64 32 1 3

### Warnings

If your compiler does not support default template parameters, then you always need to supply the `Allocator` template argument. For instance, you have to write:

`vector<int,allocator<int> >`

instead of:

`vector<int>`

If your compiler does not support namespaces, then you do not need the using declaration for `std`.

### See Also

max, max_element, min

Copyright (c) 1998, Rogue Wave Software, Inc.
Send mail to report errors or comment on the documentation.
OEM Release, June 1998