C++:列表迭代器与 vector 迭代器

标签 c++ stl iterator containers

我认为迭代器对象的想法是您可以将它类似地应用于 C++ 容器类。但是,当我尝试遍历列表对象时,我尝试使用

for(list<int>::iterator it = obj.begin(); it < obj.end(); it++){
    // some code
}

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

非常感谢您的澄清。

最佳答案

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

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

一般来说,当您希望覆盖整个范围时,最好在所有迭代器上使用“不等于”,即使这些迭代器允许比较 <。和 > .还有一个论点支持使用 !=在你的常规 for循环,因为它给你最强的 postcondition .

关于C++:列表迭代器与 vector 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15006403/

相关文章:

c++ - 从值访问键和从键访问值

c++ - 在 vector 中编写线程安全

javascript - 在不使用 for...of 的情况下正确使用迭代器

C++ 逻辑错误 : pointer array & user-defined class

c++ - 动态内存复制如何工作?

c++ - "Undefined reference to"链接目标文件时出错

c++ - 在单元测试时如何模拟基类的非重写、虚拟/非虚拟方法?

c++ - 用 const std::vector 包装现有内存?

c++ - `std::string::begin()`/`std::string::end()` 迭代器失效?

java - 对象数组(T[])的默认迭代器实现?