2011-12-01 26 views
12

Dlaczego następujący program nie zwraca minimalną wartość jako 1.std :: vector i std :: min zachowanie

#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; 
} 

zwraca minimum wartości jako 2147483647

Odpowiedz

44

Można spróbować to:

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

std::min

Zwróć mniejszy z dwóch argumentów Zwraca mniejszą liczbę a i b. Jeśli oba są równoważne, zwracana jest a.

std::min_element

Zwraca iterację skierowany na element o najmniejszej wartości w zakresie [pierwsze, na końcu). Porównywania dokonuje się przy użyciu albo operatora < dla pierwszej wersji, albo kompu dla drugiego; Element jest najmniejszy, jeśli żaden inny element nie porównuje mniej niż on (może jednak równać się).

+2

Ach, prawie na pewno tego chce. – GManNickG

+0

Zwracana wartość z 'std :: min_element()' jest iteratorem, więc musi zostać dereferencjonowana. – hmjd

+0

@hmjd Tak, masz rację. – FailedDev

-1

Należy pamiętać, że std::vector<T>::end() NIE daje iteratora do ostatniego elementu. Zwraca iterator wskazujący BEHIND ostatniego elementu.
Jeśli chcesz zaadresować pierwszy i ostatni element z logiką iteratora, musisz użyć (test.begin(), test.end()-1).

+0

To jest przydatna informacja, ale nie jest odpowiedzią na pytanie. Powinien być komentarz. –

Powiązane problemy