2011-12-01 49 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

这是有用的信息,但不是一个问题的答案。应该是一个评论。 –