设计模式简单来说就是在解决某一类问题场景时,有既定的,优秀的代码框架可以直接使用
迭代器模式Iterator的核心功能,就是提供了一种特定的方法,顺序访问一个容器中的各个元素,既不会暴露容器的内部设计细节(容器底层数据结构),又可以让外部代码访问集合内部的所有元素
1 | #include <iostream> |
上面main函数中,迭代器遍历访问容器的代码就是通用的代码,不论容器底层数据结构怎么变化,迭代器遍历容器的方式不会改变,其底层差异细节完全封装在了迭代器的hasNext和next函数中,对于用户来说内部操作完全是透明的。
C++ STL的容器迭代器设计
C++ STL内部的容器迭代器和上面通用迭代器模式的设计类比:
迭代器设计成容器的嵌套类型,因为不同的容器由于其底层数据结构的不同,需要为每个容器实现自己的迭代器进行具体的数据遍历。
C++STL容器统一提供begin()和end()方法返回容器起始元素的迭代器和末尾元素后继位置的迭代器,类比上面CArray容器提供的createIterator方法。
C++STL的迭代器通过和容器的end()相比较来判断容器元素是否迭代完成,类比上面通用迭代器的hasNext方法。
C++STL的迭代器把容器内部数据遍历的细节封装在了迭代器的operator++运算符重载函数里面,并提供迭代器的operator*()运算符重载函数,访问迭代器遍历的元素的值,类比上面通用迭代器的next方法的功能。
下面演示一个C++STL容器迭代器的标准使用方式,代码示例如下:
1 | #include <iostream> |