2013-06-15 wcdj
迭代器设计思维
(1) 迭代器(iterators)是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物。
(2)《设计模式》一书提供有23个design patterns的完整描述,其中iterator模式定义为:提供一种方法,使之能够依序巡防某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。
(3) 不论是泛型思维或STL的实际运用,iterators都扮演着重要的角色。STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。容器和算法的泛型化,从技术角度看并不困难,C++的class templates和functiontemplates可分别达成目标。如何设计出两者之间的良好胶着剂才是大难题。以算法find为例,以下是容器、算法、迭代器的合作展示:
/**
* @if maint
* This is an overload used by find() for the Input Iterator case.
* @endif
*/
template<typename _InputIterator, typename _Tp>
inline _InputIterator
__find(_InputIterator __first, _InputIterator __last,
const _Tp& __val, input_iterator_tag)
{
while (__first != __last && !(*__first == __val))
++__first;
return __first;
}
只要给予不同的迭代器,find便能够对不同的容器进行查找操作:
// file: 3find.cpp
#include <vector>
#include <list>
#include <deque>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
const int arraySize = 7;
int ia[arraySize] = {0,1,2,3,4,5,6};
vector<int>