假设我使用嵌套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?
}
}
}
答案 0 :(得分:5)
...比较同一列表中的对象:
是的,这意味着您的期望,并且工作正常。
答案 1 :(得分: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-Directional
和Random Access
迭代器 可直接比较。
请参阅:http://www.sgi.com/tech/stl/iterator_category.html
注意:end()返回的迭代器将始终具有可比性,并且在容器末尾之后返回true。但这可能不适用于其他迭代器。