stl max_element算法产生错误的结果

时间:2013-10-19 21:19:00

标签: c++ gcc stl max

我注意到整数上的 std :: max_element 有一个奇怪的行为,它的差异不超过一个:

#include <iostream>
#include <algorithm>
#include <vector>

int main() 
{
    std::vector<int> v = {1, 2, 3};
    std::cout<<*std::max_element(v.begin(), v.end())<<"\n";//it's ok - correct answer  
    std::cout<<*std::max_element(v.begin(), v.begin()+1)<<"\n";//compare between 1 and 2: answer - 1
    std::cout<<*std::max_element(v.begin()+1, v.begin()+2)<<"\n";//compare between 2 and 3: answer - 2
}

我在 64位linux 上使用 gcc 4.8 编译器。 这是编译器的错误还是其他什么?

1 个答案:

答案 0 :(得分:3)

这实际上是正确的行为,只需注意v.end()基本上是一个超过最后一个元素,这意味着它不包括在内。 v.begin()+1也是如此 - 它不包括在内,它在v.begin()之前就停止了。您查询最后两行中最大元素的范围只包含一个元素。