Sintaxis:
#include <algorithm> template< class ForwardIterator > ForwardIterator max_element( ForwardIterator inicio, ForwardIterator fin ); template< class ForwardIterator, class Compare > ForwardIterator max_element( ForwardIterator inicio, ForwardIterator fin, Comparador p );
El algoritmo max_element
y su símil min_element
encuentran el mayor (o menor) elemento en el rango [inicio, final)
. La primera forma usa el operador <
mientras la segunda usa un criterio de comparación p
.
max_element
y min_element
se ejecutan en tiempo lineal respecto de la cantidad de elementos en el rango.
inicio
, fin
-- iteradores que delimitan el rango a examinar.
p
- un criterio de comparación que sigue el comportamiento de operator<
: tiene la firma bool p(T, T)
y retorna true
si el primer argumento es “menor” que el segundo.
Un iterador apuntando al lugar donde se encuentra el elemento mayor.
template<class ForwardIterator, class Comparador> ForwardIterator max_element(ForwardIterator inicio, ForwardIterator fin, Comparador p) { if (inicio == fin)) { return fin; } ForwardIterator candidato = inicio; ++inicio; for (; inicio != fin; ++inicio) { if (p(*candidato, *inicio)) { candidato = inicio; } } return candidato; }
#include <algorithm> #include <iostream> #include <vector> int main() { int data[] = { 3, 1, 4, 1, 5, 9 }; std::vector<int> v(data, data+6); std::vector<int>::iterator result = std::max_element(v.begin(), v.end()); std::cout << "max element at: " << std::distance(v.begin(), result); return 0; }
Salida:
max element at: 5