STL体系结构
六大部件
1.容器
我們常常說程序=數據結構+算法,其實容器就是數據結構,常用的容器有sequence containers:array,vector,list,deque,還有associative container:set,map等。每個容器在使用之前都請添加頭文件,在定義時的語言風格有點類似模板,因為STL的底層實現與c++的泛型編程息息相關,關于具體的用法可以參考cplusplus.com中的rederence或者其他網站去。
2.算法
STL針對每個容器有非常多對應的算法,如與排序查找有關的快速排序,二分查找等都有,可以直接調用。很奇怪的一點是c++面向對象的思想在這里幾乎被遺棄了,我們常常把數據和函數封裝到一個類里面,但在這里算法和容器分開了。
3.迭代器
如上圖所示迭代器是算法操縱容器的手段,有點像指針,當然也能完全這樣理解,用*號解引用后能直接得到具體的數據,也能完成指針的幾乎所有的操作如++等。
4.分配器
用來分配管理內存空間,可以想象成是一個內存池,在使用容器時,我們可以對內存空間進行動態分配,當然如果我們不使用容器時分配內存用new和malloc就可以了,allocator在使用上面還是過于麻煩了要先allocate(給予對象個數)然后還要construct,destroy,deallocate。我們在使用容器時也往往使用默認的分配(容器模板第二個參數),比如vector,應該沒有人會寫vector<int,allocator>吧,不會吧不會吧(doge)。
5.仿函數
仿函數,仿函數,就是很像函數的一個東西,我們平常在使用時直接當成內置函數用就好,STL為我們提供了豐富的仿函數plus,minus,for_each,multiplies,divides,modulus,equal_to,not_equal_to,greater等等,但其實它并不是一個函數而是一個重載了()的一個類
6.適配器(容器,仿函數)
”適配器是使一種事物的行為類似于另外一種事物行為的一種機制”這句話非常常見,我的理解是它可以對容器或者仿函數進行包裝使它表現出其他的功能,下面會給例子。容器適配器有queue,priority_queue,stack。
總結
最后以侯捷先生的一個例子來結束——
#include<vector> #include<algorithm> #include<functional> #include<iostream> using namespace stdint main() {int ia[6]={1,2,3,4,5,6};//容器初始化vector<int,allocator<int>> vi(ia,ia+6);//count_if是算法,vi.begin()是迭代器,not1,bind2nd是適配器,less是仿函數//功能是統計大于4的數量cout<<count_if(vi.begin(),vi.end(),not1(bind2nd(less<int>(),4)));return 0;總結
- 上一篇: python小游戏
- 下一篇: 操作系统实验——简易FAT16文件系统的