1.容器分為sequence containers 、associative containers、unordered containers
其中sequence containers分為array(固定大小),vector(不固定大小)、deque(雙向)、list(雙向鏈表)、forward list(單向鏈表:所占空間比list少)
associative containers(便于查找數(shù)據(jù))包含set、map(元素內(nèi)容不能重復(fù))multiset、multimap(元素內(nèi)容可以重復(fù))
unordered containers中最好的數(shù)據(jù)結(jié)構(gòu)為separate chaining(多條鏈表)
2.使用rand()函數(shù)時(shí)要先設(shè)置種子
3..data傳回容器在內(nèi)存中所占的第一個(gè)地址
4.用bsearch查找前必須先進(jìn)行排序,如用qsort排序。bsearch和qsort在庫(kù)cstdlib中
5.vector空間以2倍的方式增長(zhǎng)
6.C++11新特性auto自動(dòng)判斷對(duì)象類型,當(dāng)對(duì)象為iterator類型時(shí),用auto十分方便。
7.list forward-list deque都有max_size()函數(shù)。
8.容器自身的排序函數(shù)比全局的排序函數(shù)速度快(list 、forward_list)
9.forward_list無(wú)push_back函數(shù)而又push_front函數(shù)。(無(wú)back 、size)
10.deque是偽連續(xù)數(shù)據(jù)結(jié)構(gòu)
11.deque含有stack queue的性能
12.STL提供六大組件,彼此可以組合套用:
(1)、容器(Containers):各種數(shù)據(jù)結(jié)構(gòu),如:vector、list、deque、set、map。用來(lái)存放數(shù)據(jù)。從實(shí)現(xiàn)的角度來(lái)看,STL容器是一種class template。
(2)、算法(algorithms):各種常用算法,如:sort、search、copy、erase。從實(shí)現(xiàn)的角度來(lái)看,STL算法是一種function template。
(3)、迭代器(iterators):容器與算法之間的膠合劑,是所謂的“泛型指針”。共有五種類型,以及其他衍生變化。從實(shí)現(xiàn)的角度來(lái)看,迭代器是一種將operator*、operator->、operator++、operator- -等指針相關(guān)操作進(jìn)行重載的class template。所有STL容器都有自己專屬的迭代器,只有容器本身才知道如何遍歷自己的元素。原生指針(native pointer)也是一種迭代器。
(4)、仿函數(shù)(functors):行為類似函數(shù),可作為算法的某種策略(policy)。從實(shí)現(xiàn)的角度來(lái)看,仿函數(shù)是一種重載了operator()的class或class template。一般的函數(shù)指針也可視為狹義的仿函數(shù)。
(5)、配接器(adapters);一種用來(lái)修飾容器、仿函數(shù)、迭代器接口的東西。例如:STL提供的queue和stack,雖然看似容器,但其實(shí)只能算是一種容器配接器,因?yàn)樗鼈兊牡撞客耆柚鷇eque,所有操作都由底層的deque供應(yīng)。改變functors接口者,稱為function adapter;改變container接口者,稱為container adapter;改變iterator接口者,稱為iterator adapter。
(6)、配置器(allocators):負(fù)責(zé)空間配置與管理。從實(shí)現(xiàn)的角度來(lái)看,配置器是一個(gè)實(shí)現(xiàn)了動(dòng)態(tài)空間配置、空間管理、空間釋放的class template。
這六大組件的交互關(guān)系:container(容器)通過(guò)allocator(配置器)取得數(shù)據(jù)儲(chǔ)存空間,algorithm(算法)通過(guò)iterator(迭代器)存取container(容器)內(nèi)容,functor(仿函數(shù))可以協(xié)助algorithm(算法)完成不同的策略變化,adapter(配接器)可以修飾或套接functor(仿函數(shù))。
13.opp數(shù)據(jù)和操作放在一起,Gp將數(shù)據(jù)和操作分開(kāi)放,(containers algorithms分別自己構(gòu)造,其間以Iterator鏈接,algorithms通過(guò)iterator確定操作范圍、取用container元素。)