nax*_*nge 2 c++ containers iterator stl
我认为迭代器对象的想法是你可以类似地将它应用于C++容器类.但是,当我尝试遍历列表对象时,我尝试使用
for(list<int>::iterator it = obj.begin(); it < obj.end(); it++){
// some code
}
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误.为什么这不起作用?它为什么会起作用vector::iterator?是仅仅因为列表的实现是双向链表?我认为迭代器对象抽象了通过容器移动的概念,从而允许它在操作上是相同的,无论是向量还是列表.
我真的很感激澄清.
这不起作用,因为与std::vector迭代std::list器不同,迭代器不是随机访问 - 它们是顺序的.你需要使用!=它们:
for(list<int>::iterator it = obj.begin(); it != obj.end(); it++)
Run Code Online (Sandbox Code Playgroud)
一般来说,当你想要覆盖整个范围时,对所有迭代器使用"not equals"是个好主意,即使这些迭代器允许比较<和>.还有一个论点支持!=在常规for循环中使用,因为它为您提供了最强的后置条件.