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等.
为什么是这样?
operator<并且operator>只能与RandomAccessIterator一起使用.但operator!=也可以与InputIterator,ForwardIterator和BidirectionalIterator一起使用.为了您的示例代码,it != myVector.end()并it < myVector.end()有同样的效果,但前者更普遍的,那么代码也可以与其他迭代器(例如迭代器std::list或std::map等).
顺便说一下:您的示例代码可以正常使用,operator<或者operator>因为std::vectoris 的迭代器RandomAccessIterator.
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |