2011-12-01 22 views
12

Por qué siguiente programa no devuelve como valor mínimo 1.std :: vector y std :: comportamiento min

#include <vector> 
#include <algorithm> 
#include <iostream> 

int main (int argc, char **argv) { 
    std::vector<int> test; 
    test.push_back(INT_MAX); 
    test.push_back(1); 

    int min = *(std::min(test.begin(), test.end())); 

    std::cout << "Minimum = " << min << std::endl; 
} 

Devuelve minimum valores como 2147483647

Respuesta

44

Usted podría intentar esto:

int min = *std::min_element(test.begin(), test.end()); 

std::min

Devuelve el menor de dos argumentos Devuelve el menor de a y b. Si ambos son equivalentes, a se devuelve.

std::min_element

un iterador que apunta al elemento con el valor más pequeño de la gama [primero, último). Las comparaciones se realizan utilizando el operador < para la primera versión o comp para la segunda; Un elemento es el más pequeño si ningún otro elemento compara menos que él (sin embargo, puede ser igual).

+2

Ah, esto es casi seguro lo que él quiere. – GManNickG

+0

El valor de retorno de 'std :: min_element()' es un iterador por lo que debe eliminarse la referencia. – hmjd

+0

@hmjd Sí, tienes razón. – FailedDev

-1

Tenga en cuenta que std::vector<T>::end() NO le da un iterador para el último elemento. Devuelve un iterador que apunta DETRÁS del último elemento.
Si desea abordar el primer y último elemento con lógica de iterador, debe usar (test.begin(), test.end()-1).

+0

Esta es información útil, pero no una respuesta a la pregunta. Debería haber sido un comentario. –