C++;:列表迭代器与向量迭代器 我认为迭代器对象的概念是,您可以将它类似地应用到C++容器类中。但是,当我尝试遍历列表对象时,我尝试使用 for(list<int>::iterator it = obj.begin(); it < obj.end(); it++){ // some code } for(list::iterator it=obj.begin();it

C++;:列表迭代器与向量迭代器 我认为迭代器对象的概念是,您可以将它类似地应用到C++容器类中。但是,当我尝试遍历列表对象时,我尝试使用 for(list<int>::iterator it = obj.begin(); it < obj.end(); it++){ // some code } for(list::iterator it=obj.begin();it,c++,stl,iterator,containers,C++,Stl,Iterator,Containers,我犯了个错误。为什么这样不行?为什么它适用于vector::iterator?是否只是因为列表的实现是双向链表?我认为迭代器对象抽象了在容器中移动的概念,从而允许它在操作上是相同的,无论是对于向量还是列表 我非常感谢您的澄清。这不起作用,因为与std::vector迭代器不同,std::list迭代器不是随机访问的-它们是顺序的。您需要使用=在它们上: for(list<int>::iterator it = obj.begin(); it != obj.end(); it++)

我犯了个错误。为什么这样不行?为什么它适用于
vector::iterator
?是否只是因为列表的实现是双向链表?我认为迭代器对象抽象了在容器中移动的概念,从而允许它在操作上是相同的,无论是对于向量还是列表


我非常感谢您的澄清。

这不起作用,因为与
std::vector
迭代器不同,
std::list
迭代器不是随机访问的-它们是顺序的。您需要使用
=在它们上:

for(list<int>::iterator it = obj.begin(); it != obj.end(); it++)
for(list::iterator it=obj.begin();it!=obj.end();it++)

通常,当您希望覆盖整个范围时,最好在所有迭代器上使用“notequals”,即使这些迭代器允许比较
。还有一种观点支持使用
=for
循环中使用code>,因为它给了您最强的性能。

您必须与
进行比较=as列表迭代器以随机顺序分散在所有内存中


使用:
for(list::iterator it=obj.begin();it!=obj.end();it++)
这是因为
list
不支持随机访问迭代器,只支持前向迭代器。因此,
operator运算符算术,包括排序比较运算符(如
itfor(list<int>::iterator it = obj.begin(); it != obj.end(); it++){
    // some code
}