一.迭代器在SLT中的作用
迭代器是一种抽象的概念,它即是容器中的游标,又像是一个桥梁,连接了容器与算法。它使得容器和算法可以分开,彼此独立设计。比如我们平时最长用的排序算法sort,算法本身并不知道容器内部的具体实现,那么他是如何获取和设置容器中的元素的呢?这便是迭代器在中间起了作用。
二.迭代器的构造
因为每种容器的迭代器必须知道容器的一些实现细节,因此每种容器都有专属的迭代器,但其总体架构以及与容器相关联的方式相同,因此举一个list中迭代器实现的例子来进行说明。
2.1 list迭代器类图
2.2 list迭代器实现
迭代器的实现代码实现不难看懂,此处不予详述,有兴趣的读者可以参照以上类图阅读源码。
2.3 如何得知迭代器所指类型
当某个算法中要知道迭代器所指数据的类型该如何获取呢?迭代器是通过内嵌型别来实现的。其手法大概如下:
template<class T>
struct MyIter{
typedef T value_type;
// 构造函数及其它
};
template<class I>
void fun(I ite){
typename I::value_type tmp;// 这样便可得知迭代器所指数据类型
// typename高速编译器这是一个型别,而非函数或变量
}
更多的萃取技术将在博文《STL traits萃取》中说明