简短的回答:不。
中等答案:
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。但这可能不适用于其他迭代器。