STL源码剖析读书笔记第3章

第3章  迭代器(iterator)

迭代器,容器与算法分离的关键,STL的灵魂
为了不过多暴露容器的内部细节,每个容器都封装了自己的迭代器。

文中接着讲了一个例子,如何通过一个迭代器来获得这个迭代器所指对象的类型(value_type),有点像Java里的反射

 1 template <class I, class T>
 2 void func_imp1(I iter, T t)
 3 {
 4     T tmp;
 5     ... 
 6 }
 7 template <class I>
 8 inline
 9 void func(I iter)
10 {
11     func_imp1(iter, *iter);
12 }

这个设计还是十分巧妙的。但是这个方法并不是万能的。

文中接着给出了另一个方法,并讲了traits机制,泛型与特化的一堆东西,很深奥,略过。

并且描述了为什么需要多个特化的版本,从而为容器中不同的iterator做铺垫。后面有句话讲的很好。

唯容器本身,才知道该设计出怎样的迭代器来遍历自己。

traits编程技法大量运用与STL实现品中,它利用“内嵌类型”的编程技巧与编译器的template参数推导功能,

增强C++未能提供的关于类型认证方面的能力,弥补了C++不是强类型(strong typed)语言的遗憾。

关于traits,我只知道traits就是为了为某些特性而不破坏泛型而引入的东西。

目前还没有找到特别好的例子。

关于iterator,如果容器加了const限制,那么iterator调用也必须使用const_iterator

原文地址:https://www.cnblogs.com/2010Freeze/p/2654714.html