我想做这样的事情:
std::vector<int>::iterator it;
// /cut/ search for something in vector and point iterator at it.
if(!it) //check whether found
do_something();
但是没有操作员!用于迭代器。如何检查迭代器是否指向任何东西?
答案 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()