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

时间:2013-01-22 01:43:34

标签: c++ stl

  

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

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

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

   // Operate on iter afterwards
   ..
}

我如何知道iter是否有效。有效时,我的意思是它指向向量中的现有元素,例如,从m_intVector.begin()m_intVector.end()

2 个答案:

答案 0 :(得分:6)

一般来说,你不能这样做。 C ++类型旨在实现最高效,并且不包含此类附加信息。

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

答案 1 :(得分:0)

&GT;我的意思是它指向向量中的现有元素,例如从m_intVector.begin()m_intVector.end()

不确定。只需遍历m_vector的内容,并将每个迭代器与iter进行比较。

for ( std::vector<int>::iterator it = m_intVector.begin (); it != m_intVector.end (); ++it )
    if ( it == iter ) return true;
return false;

但我怀疑你不想为这种检查买单。