以前學習過標準庫,最近身邊有人問到相關話題,故在此作一個總結ios
C++標準庫:C++ Standard Library
C++標準模板庫:Standard Template Library(STL)c++
引用方法:算法
1 #include <iostream> 2 #include <cstdio> //snprintf() 3 #include <cstdlib> //RAND_MAX 4 #include <cstring> //strlen(), memcpy() 5 #include <string> 6 using namespace std; 7 using std::cin; 8 using std::cout; 9 using std::string;
以上的六大部件解釋以下:數組
()
操做符,使用在自定義類對象時,好比咱們對石頭進行排序,在算法操做時就能夠寫一些仿函數供算法正確使用,實現方式時類模板;
要討論時間複雜度,其中n必須創建在足夠大的工業數據基礎上函數
STL採用前閉後開區間表示數據的範圍,全部的數據都是經過begin()和end()兩個函數表示數據的範圍,begin表示數據的頭,end表示數據尾的下一個元素,也就是說,對end進行解引用操做獲得的指針它是不肯定的東西,也可能形成程序宕機或者其餘不是你內心所想的東西。學習
容器分爲序列式容器和關聯式容器(分爲有序和無序),紅色部分是c++2.0引入的spa
序列式容器(Sequence Container):元素都是有序的,裏面的空間多是連續的,也多是由指針一個個串起來的;指針
關聯式容器(Associative Container):元素是由key和value組成的,固然用key能很快找value,適用於查找操做code
對比於c語言的數組,標準庫進行封裝,初始化的時候就要肯定大小,不能擴展(注意在棧上有大小限制,不一樣的機器內存限制不同);對象
一種能夠動態擴充的數組,只能在容器的末端進行擴充,當容量不足時會自動擴充,擴充規則爲當前空間的2倍,內存由Vector背後的分配器進行,使用者不用關心內存分配問題;
雙端隊列,容器兩端都可進行數據擴充;
雙向環狀鏈表,內存佔用比Forward_List多;
單向鏈表,只能從尾部擴充。
元素key是有序
目前各大廠商編譯器都是由紅黑樹(RBtree)實現,保證每一個子樹根節點鍵值大於左子樹全部節點的鍵值,小於右子樹全部節點的鍵值,左右是高度平衡的防止某一個分支比較長,每一個元素由key和value組成,set中key和value是同一個值,key和value是不分的,元素不可重複,當重複放入時容器會反彈回來;
MultSet表示元素能夠重複。
目前各大廠商編譯器也都是由紅黑樹實現,區別於set,每一個元素分爲key和value,一樣元素不可重複,當重複放入時容器會反彈回來;
Multimap表示元素可重複,也就是key-value可重複。
元素的key是無序的;
Unordered set和Unordered map底層是由哈希表(Hashtable)實現,用哈希表必然存在元素碰撞問題,因此各大編譯器都採用Separate Chaining哈希表。