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
}