关于C++中的清单
Regarding Lists in C++
list<int>::iterator it;
for ( it = l.begin(); it != l.end(); it++ )
cout << *it << " ";
cout << endl;
大家好,有人可以解释一下"列表不允许随机访问"对迭代器意味着什么吗?根据我的理解,我相信这意味着列表不会像数组和向量那样将内存存储在连续的内存位置,因此您不能将 [] 运算符与列表一起使用,而是您必须遍历整个列表才能找到元素?如果是这种情况,为什么允许你增加上面的迭代器?
非常感谢!
语句
列表不允许随机访问
并不意味着您不能访问列表中的任意(即所有(元素。这通常意味着您无法同时访问列表的随机元素("常量时间"或 O(1( 是您可能在此上下文中看到的另一件事(。例如,访问第二个元素可能比访问第 1002 个元素快得多(或慢得多(。
访问某些任意元素的唯一方法是从一个明确定义的位置开始(例如 begin()
或rbegin()
或您以前记住的某个迭代器(,然后一次向后或向前走一步。
与此形成对比,例如 std::vector
允许您访问任意元素,就像在"O(1( 时间"中使用 C 数组一样(即访问元素总是需要相同的时间,无论它是哪个元素(。
C++中的列表是链表。这意味着它们不像向量数组那样将数据存储在连续的内存块中;相反,它们由许多节点组成,每个节点都有一个指向下一个和上一个节点的链接。列表本身仅保留指向第一个和最后一个节点的链接。这允许在中间插入一个元素,而无需计算昂贵的重新分配和复制其他元素。
当您递增迭代器时,您基本上只是点击指向列表下一个节点的链接。
因为迭代器不是指针 - 它只是看起来像一个指针。
当你说++it
时,这只是it.operator++()
的简写。 在该方法中,您可以做任何您想做的事情。 您不需要只向指针添加一个。
在 list::iterator 的情况下,它采用列表中下一个节点的地址。
好吧,不知何故,你自己回答了。
在列表中,你不能用[]"跳"到随机元素,你只能做
是获取下一个(与当前您所在的位置相比(。
从第一个元素开始,为每个元素做一些事情,直到结束是没有问题的。
为第一个元素做点什么,得到下一个,做点什么,得到下一个......
每个节点都包含下一个节点的地址。通过迭代,您可以自动跳转到下一个节点。
- 一个关于在C++中重载布尔运算符的问题
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 关于std::move的使用,是否有编译警告
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 关于C++中具有多重继承"this"指针的说明
- 关于 c++ 函数中指针赋值的简单问题
- 关于 std::min, std::max 中的比较运算符的混淆
- 这是关于成员访问规则的正确摘要吗
- C++ 关于指针取消引用的技术问题
- std::is_trivially_copyable_v 关于虚拟功能
- 关于指向指针数组的指针
- 关于复制构造函数的一个棘手问题
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 关于类的 Python 文档 - 对C++的引用不正确
- 关于 C++ 中的函数类型定义
- 关于条件块的问题与&&运算符有关
- 关于如何使用指向主窗口的指针的 QT 问题
- [temp.variadic]中关于包扩展实例化的措辞