1

整数に対するstd::max_elementの奇妙な動作に気付きました。違いは 1 つだけです。

#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()これは実際には正しい動作ですが、基本的に最後の要素の1 つ後ろにあることに注意してください。つまり、含まれていません。同じことが当てはまりますv.begin()+1-それは含まれていません、それはその直前で停止しv.begin()ます. 最後の 2 行で最大の要素を照会している範囲には、1 つの要素しか含まれていません。

于 2013-10-19T21:22:45.050 に答える