2011-12-01 14 views
12

Perché seguente programma non restituisce valore minimo come 1.std :: vector e std :: comportamento 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; 
} 

Restituisce minimum valori 2147483647

risposta

44

si potrebbe provare questo:

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

std::min

Restituisce il minore di due argomenti Restituisce il minore di ae b. Se entrambi sono equivalenti, viene restituito un.

std::min_element

Restituisce un iteratore che punta all'elemento con il più piccolo valore nell'intervallo [first, last). I confronti vengono eseguiti utilizzando l'operatore < per la prima versione o comp per il secondo; Un elemento è il più piccolo se nessun altro elemento lo confronta meno di esso (potrebbe essere paragonabile, però).

+2

Ah, questo è quasi certamente quello che vuole. – GManNickG

+0

Il valore restituito da 'std :: min_element()' è un iteratore quindi deve essere dereferenziato. – hmjd

+0

@hmjd Sì hai ragione. – FailedDev

-1

Si noti che std::vector<T>::end() NON fornisce un iteratore all'ultimo elemento. Restituisce un iteratore che punta DIETRO l'ultimo elemento.
Se si desidera indirizzare il primo e l'ultimo elemento con logica iteratore, è necessario utilizzare (test.begin(), test.end()-1).

+0

Questa è un'informazione utile, ma non una risposta alla domanda. Dovrebbe essere un commento. –