如何使迭代器无效?

时间:2010-12-06 05:25:56

标签: c++ stl

因为我知道程序中的迭代器可能会因某些先前的操作而失效,所以我想明确地使它无效。比如给指针赋值NULL使它无效,我只想在迭代器上做同样的事情。 container.end()在这里不是一个确切的想法。我试图为我的迭代器分配NULL,但它失败了。如何在迭代器上获得NULL指针的相同行为?

4 个答案:

答案 0 :(得分:4)

  某些先前的操作可能会使

失效,我想明确地使它无效

...如果您知道它可能无效,那么您只需要停止使用。使迭代器无效显式无效,因为无论如何使用它都是编程错误。

答案 1 :(得分:2)

为什么不想使用container.end()?...它适用于大多数容器...

对于std :: string您可能需要检查位置是yourstring.npos;

答案 2 :(得分:1)

总的来说,你不能。有一些迭代器根本无法失效。例如,可以将随机数生成器建模为输出迭代器,operator*返回当前数字,operator++生成新数据。

答案 3 :(得分:1)

这不应该一直有效吗? (迭代器总是可赋值且可默认构造)

template <typename Iter>
void foo(Iter it){
  it = Iter(); // invalidate
}