STL中迭代器的类型是什么?

时间:2012-04-28 13:43:06

标签: c++ stl

c ++中的每个变量都有类似于int i的类型,i的类型为int。 类似地,我们在STL中有迭代器,我们声明这样说

       map<string,int>::iterator it .

此处it的类型是什么?它是指针类型还是指针类型 在存储int或其他类型的向量的情况下,我们通过deference迭代器来获取与这些迭代器关联或指向的值。或者运算符*在STL中为迭代器重载了?

2 个答案:

答案 0 :(得分:6)

  

it的类型是什么?

it的类型是map<string,int>::iterator,这是一个有一堆运算符重载的类。

对于某些容器类型,Container::iterator 可能是原始指针类型。对于map,它必须是一个类。

答案 1 :(得分:4)

24.2.1 / 1 [iterator.requirements.general]总结得很好:

  

迭代器是指针的泛化,它允许C ++程序以统一的方式处理不同的数据结构(容器)。为了能够构建在不同类型的数据结构上正确有效工作的模板算法,该库不仅形式化了接口,还形成了迭代器的语义和复杂性假设。

短语“指针的泛化”意味着指针迭代器。 std::vector<T>::iterator被允许为typedef T *。但是,大多数迭代器通过运算符重载来实现接口。 (注意,迭代器也不需要属于容器。)

这种语言是编写C ++标准的非常典型的语言。它描述了事物的行为方式,但避免了根据基类定义接口。有各种迭代器:输入,输出,转发,双向和随机访问。每个都有不同的规范,虽然随机访问是双向接口的严格超集,但它们在C ++类型系统中完全不相关。

迭代器可以是++*重载的任何类,以及std::iterator_traits的有效特化。 基类std::iterator,它与std::iterator_traits一起使用来定义必要的接口。这是一个很好的C ++泛型编程和特征类的案例研究。