C++迭代器是"安全的"吗?

Mau*_*ren 3 c++ iterator stl

我已经阅读了C++列表迭代器的文档,但无法弄清楚一件事:C++迭代器是否"安全"?我的意思是,一旦它到达列表中的最后一个现有元素,它是否会停止递增?

[]的

Mar*_*ers 11

不,从这个意义上讲,它们并不"安全".可以将迭代器递增到结尾.对于标准库中的所有迭代器,执行此操作将导致未定义的行为.您可以定义自己的迭代器,如果您愿意,可以安全地运行.


wil*_*ell 9

什么你问是不会std::list::iterator做束缚检查.答案是否定的,但事实并非如此.这意味着迭代器比其他方式更快.如果你想要绑定检查,那么你可以用你自己的绑定检查迭代器包装器来包装迭代器.

但是如果你在使用迭代器时遵循约定,那么在编译时你总是会知道迭代器是无效的,即指向无效位置.例如:

  • 从a中擦除元素std::list然后确保存储迭代器erase()返回以获取指向新有效位置的有效迭代器,就在擦除元素之外.
  • 当您调用时,请std::remove()确保存储返回的迭代器,以便了解容器的新边界.

这种方法将边界检查问题移到了一边,同时保留了迭代器的性能,这些迭代器不需要费心去确保用户不会在脚下射击.