迭代器=指针?或者它是什么?

tro*_*dor 7 c++

C++中的iterator是指针吗?我问的原因是,似乎没有人完全理解迭代器是什么.这只是他们所说的"事物"或"价值".但迭代器只是指向元素,它的位置.当我们取消引用它时,就像查看迭代器指向的内容一样.这是一个正确的比喻吗?请帮忙

Mar*_*low 5

不。迭代器不仅仅是“一个指针”。

在某些情况下,迭代器可以是一个指针——但也可以是更多。迭代器是指针功能的概括。

当您增加一个指针时,它会前进到内存中的下一个位置(以您正在处理的对象的大小为模)。当您增加迭代器时,它会前进到“序列中的下一个元素”。如果您正在使用链表,它会前进到列表中的下一个元素。如果您正在使用地图或集合,则到地图/集合中的下一个元素,依此类推。

  • 我知道了。如果我们有一个来自 C 的经典数组,所有元素在内存中看起来都像一条直线,这就是增加指针使其指向下一个元素的原因。与列表相反,其中元素可以在内存中以随机顺序排列,但递增迭代器将使其指向下一个元素,而不管元素在内存中的位置。感谢您的有用说明。 (2认同)

小智 5

简短的答案是:

  • 指针是一种迭代器。
  • 指针因此可以用作迭代器。
  • 指针具有迭代器以外的属性。

历史

从历史上看,我们有C指针,当C ++发明时,它就被改编成C ++。指针表示内存中的位置,因此可以用作数组中的位置。

后来在1990年代,C ++引入了一个称为“迭代器概念”的想法。“迭代器概念”与一个称为STL的库(后来被标准库吸收)和一个称为“通用编程”的范例有关。迭代器概念选自C指针启发来表示类似容器的位置vectordeque以及其他,只是如C指针数组中如何表示位置。迭代器的概念经过精心设计以与C指针兼容,因此,如今我们可以说C指针对迭代器概念进行建模

迭代器概念

理解迭代器概念的一种简化方法是,如果数据类型支持一系列操作和行为,以使其表示容器中的某个位置,并允许对元素的某种访问,则可以将其称为迭代器。

经过精心设计的迭代器概念,C指针满足了该列表。因此,指针是一种迭代器。

迭代器概念只是对类型的一组要求,这意味着您可以通过C ++数据抽象能力创建自己的迭代器。

指针的其他属性

指针具有其他属性,并且与迭代器概念无关。

指针的一个重要用途是表达引用语义,即引用远程存储位置中的对象。指针的这种使用后来被认为是不安全的,并导致了“智能指针”的发明。通过比较智能指针和迭代器,我们可以发现它们是完全不相关的概念。

指针的另一种用法是引用原始内存位置。这对于应用程序编程来说是完全不安全的,但是对于微控制器编程来操纵硬件来说,这是必不可少的工具。