1

我注意到整数上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编译器。这是编译器的错误,还是其他?

4

1 回答 1

3

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

于 2013-10-19T21:22:45.050 回答