意外的max_element行为

时间:2016-02-16 04:52:27

标签: c++ algorithm c++11 iterator

#include<iostream>
#include<algorithm>

int main()
{
    int a[3]={5,3,4};
    std::cout<<*std::max_element(&a[1],&a[2])<<"\n";
    return 0;
}

此代码显示3作为输出。

1 个答案:

答案 0 :(得分:4)

你应该写

std::cout << *std::max_element( a, a + 3 ) << "\n";

或者包含标题<iterator>并写入

#include <iterator>

//...
std::cout << *std::max_element( std::begin( a ), std::end( a ) ) << "\n";

算法的范围指定为[first, last ),其中迭代器last指向的元素不包含在范围内。

因此,对于算法[&a[1],&a[2] )的这些参数,元素a [2]将不参与与数组的其他元素的比较。此范围仅指定数组的一个元素a[1]

考虑数组的索引以0开头。