有没有办法验证STL容器的迭代器?

Eri*_*c Z 0 c++ stl

可能重复:
C++检查迭代器是否有效的最佳方法

假设我有一个函数,它将迭代器作为唯一参数,如下所示.

void DoSomethingWithIterator(std::vector<int>::iterator iter)
{
   // Check the pre-condition
   assert( /* how to validate iter here? */ )

   // Operate on iter afterwards
   ..
}
Run Code Online (Sandbox Code Playgroud)

我怎么知道是否iter有效.通过有效的,我的意思是它指向的载体,例如,从内部的现有元素m_intVector.begin()m_intVector.end().

rbu*_*rny 6

一般来说,你不能这样做.C++类型旨在最大限度地提高效率,并且不包含此类附加信息.

例如,vector的迭代器很可能等同于指向元素的指针(在我的机器上就是这种情况,使用g ++ 4.7.2).

  • 我说"很可能是",取决于实施情况.在我的机器上它按位等于指针.虽然编译器仍将它们视为不同类型,但迭代器显然无法容纳更多信息. (3认同)