解除引用iterator-value类型的迭代器

时间:2014-06-18 15:16:30

标签: c++ stl

如果我想迭代stl地图,通常我会使用

for (it=my_map.begin();it!=my_map.end();it++)
{
}

我知道如果(typeid(map<int,char>::iterator::value_type) == typeid(pair<const int,char>))为真,即 iterator的{​​{1}}的值类型为std::map(key_type,value_type)

但如果我想做

std::pair(const key_type,value_type)

编译器会出错吗?

此作业std::pair<const key_type,value_type> b=it; 有效。

我的问题:std::pair<const key_type,value_type> b=*it;iterator pointer to pair的类型是什么?

2 个答案:

答案 0 :(得分:7)

迭代器是迭代器。它们既不是指针,也不是配对。它们是迭代器。

“解除引用” 1 来自std::map<K, V>的迭代器会给你一个std::pair<const K, V>& 2 ,是的,但是迭代器本身有它自己的类型。


1) *->运算符被重载以执行此间接,因为迭代器实际上并不是C ++意义上的指针。

2)const std::pair<const K, V>&,如果您从std::map<K, V>::const_iterator开始。

答案 1 :(得分:0)

您的问题的答案取决于迭代器的实现方式。只要类型支持迭代器所需的操作,实现就不应该被关注。在std::map的迭代器的情况下,很可能它们实际上是结构,而不仅仅是指针。原因是通常将地图实现为平衡树,因此迭代器需要知道如何按顺序遍历树。这需要一些簿记(父节点,可能?)