2011-12-01 75 views
12

爲什麼下面的程序沒有返回最小值爲1的std :: vector和std ::分鐘行爲

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

它返回minimum2147483647

回答

44

你可以試試這個:

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

std::min

返回較小的兩個參數 返回a和b的較小者。如果兩者都相同,則返回a。

std::min_element

返回指向元件與在範圍[第一,最後一個)的值最小的迭代器。該比較使用的是操作者<爲第一個版本,或補償用於第二執行;一個元素是最小的,如果沒有其他元素比較小於它(雖然它可以比較相等)。

+2

啊,這是幾乎可以肯定他想要的東西。 – GManNickG

+0

從'的std :: min_element的返回值()'是一個迭代因此它需要被解除引用。 – hmjd

+0

@hmjd是的你是對的。 – FailedDev

-1

注意std::vector<T>::end()不給你一個迭代的最後一個元素。它返回一個指向BEHIND最後一個元素的迭代器。
如果要用迭代器邏輯來解決第一個和最後一個元素,則需要使用(test.begin(), test.end()-1)

+0

這是有用的信息,但不是一個問題的答案。應該是一個評論。 –