可能性のある複製:
イテレータが有効かどうかを確認するC++の最良の方法
私はこのようなことをしたいです:
std::vector<int>::iterator it;
// /cut/ search for something in vector and point iterator at it.
if(!it) //check whether found
do_something();
しかし、演算子はありません!イテレータ用。イテレータが何かを指しているかどうかを確認するにはどうすればよいですか?
できません。通常の慣用法は、コンテナーの終了イテレーターを「見つかりません」マーカーとして使用することです。これは何 std::find
戻り値。
std::vector<int>::iterator i = std::find(v.begin(), v.end(), 13);
if (i != v.end())
{
// ...
}
割り当てられていないイテレータで実行できる唯一のことは、値を割り当てることです。
イテレータはポインタの一般的な形式と見なされますが、正確にはポインタではありません。標準はPast-the-end
コンテナでの検索の失敗を示すイテレータ。したがって、イテレータのNULLをチェックすることはお勧めしません
Past-the-end
値は、特異ではなく、参照不可です。
if(it != aVector.end()) //past-the-end iterator
do_something();
イテレータをループで使用したい場合、それを使用する最も安全な方法は次の方法です。
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it)
{
do_smth();
}