std::vector and std::min behavior



为什么下面的程序不返回最小值为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

你可以试试:

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

std::min

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

std::min_element

返回一个迭代器,指向[first,last)范围内值最小的元素。比较使用操作符<对于第一个版本,或者对于第二个版本;>

如果没有其他元素比它小,则该元素是最小的。

请注意,std::vector<T>::end()并没有给你最后一个元素的迭代器。它返回一个指向最后一个元素后面的迭代器。
如果你想用迭代器逻辑来处理第一个和最后一个元素,你需要使用(test.begin(), test.end()-1)

最新更新