std :: vector和std :: min行为

时间:2011-12-01 11:24:03

标签: c++ stl

为什么以下程序没有将最小值返回为1。

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

它将minimum值返回为2147483647

2 个答案:

答案 0 :(得分:45)

你可以试试这个:

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

std::min

返回两个参数中较小的一个 返回a和b中较小的一个。如果两者都是等价的,则返回a。

std::min_element

返回一个迭代器,该迭代器指向范围[first,last]中具有最小值的元素。使用任一运算符&lt;执行比较来执行比较。对于第一个版本,或comp为第二个版本;如果没有其他元素比它少,那么元素是最小的(尽管如此,它可能比较相等)。

答案 1 :(得分:-1)

请注意std::vector<T>::end()不会为最后一个元素提供迭代器。它返回一个指向BEHIND最后一个元素的迭代器 如果要使用迭代器逻辑寻址第一个和最后一个元素,则需要使用(test.begin(), test.end()-1)