web-dev-qa-db-ja.com

STLイテレータが何かを指しているかどうかを確認するにはどうすればよいですか?

可能性のある複製:
イテレータが有効かどうかを確認するC++の最良の方法

私はこのようなことをしたいです:

std::vector<int>::iterator it;
// /cut/ search for something in vector and point iterator at it. 
if(!it) //check whether found
    do_something(); 

しかし、演算子はありません!イテレータ用。イテレータが何かを指しているかどうかを確認するにはどうすればよいですか?

23
lampak

できません。通常の慣用法は、コンテナーの終了イテレーターを「見つかりません」マーカーとして使用することです。これは何 std::find 戻り値。

std::vector<int>::iterator i = std::find(v.begin(), v.end(), 13);
if (i != v.end())
{
     // ...
}

割り当てられていないイテレータで実行できる唯一のことは、値を割り当てることです。

48
James Hopkin

イテレータはポインタの一般的な形式と見なされますが、正確にはポインタではありません。標準はPast-the-endコンテナでの検索の失敗を示すイテレータ。したがって、イテレータのNULLをチェックすることはお勧めしません

Past-the-end値は、特異ではなく、参照不可です。

if(it != aVector.end())  //past-the-end iterator
    do_something();
2
aJ.

イテレータをループで使用したい場合、それを使用する最も安全な方法は次の方法です。

for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it)
{
 do_smth();
}
0
Xeningem