dis*_*ery 2 c++ pointers iterator
我试图掌握迭代器的概念。我通过以下代码运行了一些测试:
#include <iostream>
#include<map>
using namespace std;
int main(){
map<string,string> mp;//create the map
mp["key"]="value";//create a key/val pair
map<string,string>::iterator it=mp.begin();//create an iterator named it
cout<<(&it)<<" "<<(&*it)<<endl;// 0x7ffeeccd6a18 0x7f9dc5c05970
it++;//moving the current value of the iterator
cout<<(&it)<<" "<<(&*it);// 0x7ffeeccd6a18 0x7ffeeccd6a70
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我们可以将迭代器概念化为一个包含值的盒子——我们正在迭代的可迭代对象的值。当我们做“it++”时;并移动迭代器的当前值,我们现在正在访问不同的元素,这就是 (&*it) 更改的原因。实际的框不会改变,这就是为什么 (&it) 在两种情况下都保持不变(因为我们正在获取迭代器对象的地址)。
我不确定我是否理解正确,所以请告诉我是否正确,如果我错了请纠正我。
C++ 中的迭代器究竟是什么?
迭代器是一个概念。该概念描述了具有特定属性和具有特定行为的操作的类型。符合“迭代器”概念的类型被称为迭代器,类似地,这种类型的对象也是迭代器。
更具体地说,迭代器是指针的泛化。它通常指向一个实体(通常是一个对象),您可以通过迭代器间接访问指向的对象(使用*称为间接运算符的一元运算符)并且有一种方法可以将迭代器修改为指向“ next”实体(使用运算符++)。
我们可以将迭代器概念化为一个保存值的盒子
“持有”可能会产生误导。引用的实体不一定也不通常存储在迭代器中。它通常存储在其他地方,迭代器“知道”实体在哪里。
我将其描述为带有如何找到实体的说明的标志,而不是“盒子”。作为视觉隐喻,它“指向”实体。
实际的框不会改变,这就是为什么 (&it) 在两种情况下都保持不变的原因
需要明确的是, 的值it确实发生了变化。但是it仍然是同一个迭代器对象,所以它的地址是一样的。
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |