stl提供六大元件,彼此可以組合套用:
1、容器(containers):各種
資料結構,如vector,list,deque,set,map,用來存放資料.
從實現的角度來看,stl容器是一各class template,就體積而言,這一部分很像冰山載海面的比率。 2、
演算法(algorithms):各種常用演算法如sort,search,copy,erase。
從實現的角度來看,stl演算法是一種function templates。
3、迭代器(iterators):扮演容器與演算法之間的膠合劑,是所謂的「
泛型指標」,共有五種型別,以及其它衍生變化,
從實現的角度來看,迭代器是一種將:operators*,operator->,operator++,operator--等相關操作予以過載的class template。所有stl容器都附帶有自己專屬的迭代器——是的,只有容器設計者才知道如何遍歷自己的元素,原生指標(native pointer)也是一迭代器。
4、仿函式(functors): 行為類似函式,可作為演算法的某種策略(policy),
從實現的角度來看,仿函式是一種過載了operator()的class 或 class template。一般函式指標可視為狹義的仿函式。
5、配接器(adapters):一種用來修飾容器(containers)或仿函式(functors)或迭代器(iterators)介面的東西,例如:
stl提供的queue和stack,雖然看似容器,其實只能算是一種容器配接器,因為 它們的底部完全借助deque,所有操作有底層的deque**。改變functor介面者,稱為function adapter;改變container介面者,稱為container adapter;改變iterator介面者,稱為iterator adapter。
配接器的實現技術很難一言蔽之,必須逐一分析。
6、配接器(allocators):負責
空間配置與管理,
從實現的角度來看,配置器是乙個實現了動態空間配置、空間管理、空間釋放的class template。
這六大元件的互動關係:container(容器) 通過 allocator(配置器) 取得資料儲存空間,algorithm(演算法)通過 iterator(迭代器)訪問 container(容器) 內容,functor(仿函式) 可以協助 algorithm(演算法) 完成不同的策略變化,adapter(配接器) 可以修飾或套接 functor(仿函式)。如下圖:
摘自《stl原始碼剖析》1.2節
STL中六大元件的關係
六大元件 容器 containers 各種資料結構,如 vector,list,deque,set,map,用來存放 元素 就是template class。演演算法 algorithms 各種常用演演算法如 sort,search,copy,erase,就是template class。迭代器 i...
STL六大元件
stl提供六大元件,彼此可以組合套用。1 容器 containers 各種資料結構。如vector,list,deque,set,map,用來存放資料。容器又可以分為順序容器和關聯容器.順序容器 vector,list,deque,stack,queue,heap,priority queue,sl...
STL 六大元件
1.容器 containers 各種資料結構,如vector,list,deque,set,map,用來存放資料。從實現的角度看,stl容器是一種class template。2.演算法 algorithms 各種常用的演算法如sort,search,copy,erase 從實現的角度看,stl演算...