在C++中为什么我们不能使用>和<?来比较迭代器?

The*_*ton 9 c++ syntax iterator loops idiomatic

我被问到这个问题我不知道为什么.

如果你有一个指针int * x;
可以比拟的指针><,因为它代表的内存位置类似0x0000 0x0004 0x0008,等我知道迭代器和指针是不同的,但他们以非常相似的方式行事.

例如:

vector<int> myVector;

for(int i = 1; i < 101; i++)
{
    myVector.push_back(i);
}

vector<int>::iterator it = myVector.begin();
while(it != myVector.end()) //Why can't we write it < myVector.end()
{
    cout << *it << endl;
    it++;
}
Run Code Online (Sandbox Code Playgroud)

为什么我们不能< myVector.end()while声明中写出来?我知道这与STL中没有超载有关.然而,写作是&*it < &*myVector.end()有效的,因为它获得了显示说话的内存位置0x0004 0x0008等.

为什么是这样?

son*_*yao 9

operator<并且operator>只能与RandomAccessIterator一起使用.但operator!=也可以与InputIterator,ForwardIteratorBidirectionalIterator一起使用.为了您的示例代码,it != myVector.end()it < myVector.end()有同样的效果,但前者更普遍的,那么代码也可以与其他迭代器(例如迭代器std::liststd::map等).

顺便说一下:您的示例代码可以正常使用,operator<或者operator>因为std::vectoris 的迭代器RandomAccessIterator.