如何检查STL迭代器是否指向任何东西?

时间:2009-05-05 09:56:50

标签: c++ stl iterator

  

可能重复:
  C++ Best way to check if an iterator is valid

我想做这样的事情:

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

但是没有操作员!用于迭代器。如何检查迭代器是否指向任何东西?

4 个答案:

答案 0 :(得分:48)

你做不到。通常的习惯用法是将容器的结束迭代器用作“未找到”标记。这是std::find返回的内容。

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

对于未分配的迭代器,您唯一能做的就是为它赋值。

答案 1 :(得分:2)

虽然迭代器被认为是指针的一般形式,但它们并不完全是指针。标准定义Past-the-end迭代器以指示容器中的搜索失败。因此,不建议检查迭代器是否为NULL

Past-the-end值是非奇异且不可引用的。

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

答案 2 :(得分:0)

如果你想在循环中使用迭代器,最安全的方式就是这样:

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

答案 3 :(得分:-2)

我认为这通常会给你一个很好的考验:

if (iterator._Mycont == &MyContainer)
{
Probably a valid iterator!
}

您可以进行测试以确保迭代器不等于结束...

iterator != MyContainer.end()

iterator >= MyContainer.begin()