2017-09-10 13 views
1

以下のコードが1を返すのはなぜですか? multisetコンテナには、1を挿入しません。C++マルチセットの予期せぬ出力lower_bound

#include <iostream> 
#include <set> 

int main() 
{ 
    std::multiset<int> mymultiset; 
    std::multiset<int>::iterator itlow; 

    mymultiset.insert(-3); 
    itlow = mymultiset.lower_bound (3); 
    std::cout << *itlow << endl; // output 1 

    return 0; 
} 
+2

end() - lower_boundをチェックします。戻り値:値より小さくない最初の要素を指すイテレータまたはそのような要素が見つからない場合は最後のイテレータ。 –

+0

@ArtemyVysotsky、終了のチェッ​​クを理解しますが、なぜ1が返されますか?それはどこから来ていますか? –

答えて

4

mymultiset.lower_bound(3)3が行くことができる容器の中で最も低い場所を返し、それがコンテナの終わりです。したがって、itlowmymultiset.end()に等しく、逆参照はできません。 には未定義の動作があります。

+0

Thanks Pete、私は未定義の動作として1が返されると思います。応答として回答を記入してください。 –

1

下限が3で、最大値が-3のIteratorを取得しようとしています。だから、あなたは値が定義されていない終了イテレータを持っています。 イテレータとしてmultiset::begin()を使用するか、あまり穏やかでないitlow = mymultiset.lower_bound (-4);のようなものを入れてください。

関連する問題