2

假设我使用嵌套的 for 来比较同一列表中的对象:

for( list<Object>::iterator iter = list.begin() ; iter != list.end() ; ++iter )
  {
    for( list<Object>::iterator iter2 = list.begin() ; iter2 != list.end() ; ++iter2 )
    {
      if( iter == iter2 )
      {
        // does this mean iter is pointing to the same INDEX
        // as iter2?  Will this work as expected?
      }
    }
  }
4

2 回答 2

5

...比较同一列表中的对象:

是的,这正是您所期望的,并且工作正常。

于 2012-10-29T16:24:42.090 回答
2

简短的回答:

中等答案:

std:: 中的普通容器提供了可以直接比较的迭代器。但是您不能对其他容器类型做出这种一般假设。

长答案:

这完全取决于容器的类型,以及该容器返回的迭代器的类型。如果您在谈论标准(std::) 中的容器,那么是的。但不要假设这适用于所有类型的迭代器。请记住,在 C++ 中,传递迭代器而不是对容器的引用更为常见。

template<typename I>
I doStuff(I begin, I end)
{
      typedef tyepename std::interator_traits<I>::iterator_category   iterator_category;

      I   alternative = begin;

      assert(alternative == begin);   // Will always be true

      ++begin;
      ++alternative;

      assert(alternative == begin);  // Will depend on the type of iterator.
      return end;
}

// Alternative using container
template<typename C>
void doStuff(C& cont)
{
      typedef tyepename std::interator_traits<typename C::iterator>::iterator_category   iterator_category;

      I   begin       = cont.begin();
      I   alternative = cont.begin();

      assert(alternative == begin);   // Will always be true

      ++begin;
      ++alternative;

      assert(alternative == begin);  // Will depend on the type of iterator.
}

Input并且output迭代器不能像那样直接比较。

但是Bi-DirectionalRandom Access迭代器直接可比的。

见:http ://www.sgi.com/tech/stl/iterator_category.html

注意:end() 返回的迭代器总是可以直接比较的,并且在容器末尾之后返回 true。但这可能不适用于其他迭代器。

于 2012-10-29T17:36:10.827 回答