8

私は現在 STL を学んでおり、find および const イテレータについていくつかの不確実性があります。私が検索機能を持っているとしましょう:

some_stl_container::const_iterator found = myContainer.find(value);

その後、found別の const_iterator に対して何を取得したかを確認する必要がありますか、または単にイテレーターに対して確認を行うことは有効ですか。基本的に、これを行うことには違いがあります:

if(found!=myContainer.cend())

この:

if(found!=myContainer.end())

最初のほうが(少なくとも私には)より正確に見えますが、2番目もうまくいくはずですよね?

4

2 に答える 2

10

すべての標準ライブラリ コンテナは、Container::iteratorに変換可能な要件を満たしていますContainer::const_iterator。したがって、両方の比較が有効で、同じ結果が得られます。

§23.2.1 から - 表96

X::iterator ...前方反復子の要件を満たす任意の反復子カテゴリ。にコンバーチブルX::const_iterator

于 2013-06-04T20:57:11.503 に答える
1

イテレータが異なるかどうかを確認することmyContainer.end()は問題ありません。cendメソッドは明示的にcbeginconst イテレータを取得するためだけにここにあるため、ケースに違いはありません。

c++11 で反復子の型を推測することができることに注意してください。また、標準ライブラリが正しい名前 (STL ではない) であるauto found = myContainer.find(value)と主張する人もいることに注意してください。

于 2013-06-04T20:56:20.917 に答える