【发布时间】:2021-09-17 07:30:58
【问题描述】:
我试图掌握迭代器的概念。我通过以下代码运行了一些测试:
#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
}
根据我的理解,我们可以将迭代器概念化为一个包含值的盒子——我们正在迭代的可迭代对象的值。当我们执行“it++;”时并移动迭代器的当前值,我们现在正在访问一个不同的元素,这就是 (&*it) 改变的原因。实际的盒子没有改变,这就是为什么 (&it) 在两种情况下都保持不变(因为我们正在获取迭代器对象的地址)。
我不确定我是否理解正确,所以请告诉我我是否正确,如果我错了请纠正我。
【问题讨论】:
-
迭代器是一个概念。他们可以以不同的方式行事。底层实现就是这样,一个底层实现。但是,我想不出我见过的任何例子,你的例子都站不住脚。
-
“可迭代的值” 不明确。迭代器不不包含
key也不包含value。它确实包含迭代器指向的元素的地址。 -
这能回答你的问题吗? What is an iterator in general?