c ++中的每个变量都有类似的类型int i,i有类型int.类似地,我们在STL中有迭代器,我们声明这样说
map<string,int>::iterator it .
Run Code Online (Sandbox Code Playgroud)
it这边有什么类型的?它是指针类型还是指针类型,因为我们通过deference迭代器来获取在存储int或其他类型的向量的情况下由这些迭代器关联或指向的值.或者*STL中的迭代器运算符过载?
是什么类型的
it?
itis 的类型map<string,int>::iterator,是一组有一堆运算符重载的类.
对于某些容器类型,Container::iterator 可能是原始指针类型.因为map,它必须是一个类.
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++ 泛型编程和特征类的一个很好的案例研究。