C++中的iterator是指针吗?我问的原因是,似乎没有人完全理解迭代器是什么.这只是他们所说的"事物"或"价值".但迭代器只是指向元素,它的位置.当我们取消引用它时,就像查看迭代器指向的内容一样.这是一个正确的比喻吗?请帮忙
不。迭代器不仅仅是“一个指针”。
在某些情况下,迭代器可以是一个指针——但也可以是更多。迭代器是指针功能的概括。
当您增加一个指针时,它会前进到内存中的下一个位置(以您正在处理的对象的大小为模)。当您增加迭代器时,它会前进到“序列中的下一个元素”。如果您正在使用链表,它会前进到列表中的下一个元素。如果您正在使用地图或集合,则到地图/集合中的下一个元素,依此类推。
小智 5
简短的答案是:
从历史上看,我们有C指针,当C ++发明时,它就被改编成C ++。指针表示内存中的位置,因此可以用作数组中的位置。
后来在1990年代,C ++引入了一个称为“迭代器概念”的想法。“迭代器概念”与一个称为STL的库(后来被标准库吸收)和一个称为“通用编程”的范例有关。迭代器概念选自C指针启发来表示类似容器的位置vector,deque以及其他,只是如C指针数组中如何表示位置。迭代器的概念经过精心设计以与C指针兼容,因此,如今我们可以说C指针对迭代器概念进行建模。
理解迭代器概念的一种简化方法是,如果数据类型支持一系列操作和行为,以使其表示容器中的某个位置,并允许对元素的某种访问,则可以将其称为迭代器。
经过精心设计的迭代器概念,C指针满足了该列表。因此,指针是一种迭代器。
迭代器概念只是对类型的一组要求,这意味着您可以通过C ++数据抽象能力创建自己的迭代器。
指针具有其他属性,并且与迭代器概念无关。
指针的一个重要用途是表达引用语义,即引用远程存储位置中的对象。指针的这种使用后来被认为是不安全的,并导致了“智能指针”的发明。通过比较智能指针和迭代器,我们可以发现它们是完全不相关的概念。
指针的另一种用法是引用原始内存位置。这对于应用程序编程来说是完全不安全的,但是对于微控制器编程来操纵硬件来说,这是必不可少的工具。
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |