vector和list的比較熟悉,乙個單鏈表,乙個雙鏈表(push_pack,insert, erase,list的sort功能(great()),還有演算法那個庫)
slist,只能用pushfront()
(三)deque容器(雙端佇列)
說明(四)stack#include deque容器類與vector類似,支援隨機訪問和快速插入刪除,它在容器中某一位置上的操作所花費的是線性時間。與vector不同的是,deque還支援從開始端插入資料:push_front()。(deque雙向佇列是一種雙向開口的連續線性空間,可以高效的在頭尾兩端插入和刪除元素,相當於list和slist,並加入了操作區間
) 構造:
dequec 建立乙個空的deque
dequec1(c2) 複製乙個deque。
dequec(n) 建立乙個deque,含有n個資料,資料均已預設構造產生。
dequec(n, elem) 建立乙個含有n個elem拷貝的deque
dequec(beg,end) 建立乙個以[beg;end)區間的deque(
beg和end都是位址)
c.~deque() 銷毀所有資料,釋放記憶體
方法:c.assign(beg,end) 將[beg; end)區間中的資料賦值給c。(
這個和構造一樣的)
c.assign(n,elem) 將n個elem的拷貝賦值給c。
c. at(idx) 傳回索引idx所指的資料,如果idx越界,丟擲out_of_range。
c.back() 傳回最後乙個資料,不檢查這個資料是否存在。
c.begin() 傳回迭代器中的第乙個資料。
c.clear() 移除容器中所有資料。
c.empty() 判斷容器是否為空。
c.end() 指向迭代器中的最後乙個資料位址。
c.erase(pos) 刪除pos位置的資料,傳回下乙個資料的位置。
c.erase(beg,end) 刪除[beg,end)區間的資料,傳回下乙個資料的位置。
c.front() 傳回第乙個資料。
get_allocator 使用建構函式返回乙個拷貝。
c.insert(pos,elem) 在pos位置插入乙個elem拷貝,傳回新資料位置
c.insert(pos,n,elem) 在pos位置插入》n個elem資料。無返回值
c.insert(pos,beg,end) 在pos位置插入在[beg,end)區間的資料。無返回值
c.max_size() 返回容器中最大資料的數量。
c.pop_back() 刪除最後乙個資料。
c.pop_front() 刪除頭部資料。
c.push_back(elem) 在尾部加入乙個資料。
c.push_front(elem) 在頭部插入乙個資料。
c.rbegin() 傳回乙個逆向佇列的第乙個資料。
c.rend() 傳回乙個逆向佇列的最後乙個資料的下乙個位置。
c.resize(num) 重新指定佇列的長度。
c.size() 返回容器中實際資料的個數。
c.swap(c2)
swap(c1,c2) 將c1和c2元素互換。
pop, push,top(棧頂的元素值,而且可以用)
stackst;
st.push(2);
printf("%d",st.top());
(五) queue
這個是乙個真實單向佇列,前進後出
(六)heap
四個基本函式
make_heap();、pop_heap();、push_heap();、sort_heap();
void make_heap(first_pointer,end_pointer,compare_function);//point=
iterator
作用:把這一段的陣列或向量做成乙個大根堆的結構(根據完全二叉樹來決定位置,a[0]為根節點,a[1]為左節點,以此類推)
void pop_heap(first_pointer,end_pointer,compare_function);
作用:pop_heap()不是真的把最大(預設)的元素從堆中彈出來。而是重新排序堆。它
把first和last交換,然後將[first+1,last)的資料再做成乙個堆。
void sort_heap(first_pointer,end_pointer,compare_function);
作用是sort_heap對[first,last)中的序列進行排序。它假設這個序列是有效堆。(當然
,經過排序之後就不是乙個有效堆了);從小到大排序
void push_heap(value);//插入最後的位置,然後比較重排,比如前面已經有六個元素,插入到第七個位置,然後進行大堆排序,一層一層往上比較、替換,最終得到最好的的結果
(七)priority_queue
#include
priority_queue, greater> q;
當《與《緊挨著,《與《之間要加空格(>類似),否則會編譯錯誤!!!
priority queue中的元素根據優先順序被讀取,它的介面和queue非常相近
但是其top()/pop()的物件並非第乙個置入的元素,而是優先順序最高的元素。
換句話說,priority queue內的元素已經跟去其值和排序準則進行了排序。
優先最高的是由大小定義的,如果沒有greater,就預設從大到小,不然就從小到大
相當於堆
(八)set,multiset,
hash_set
set確實是集合,除了assign的方法等等以外,還有
//交集
set_intersection( s.begin(), s.end(),
s2.begin(), s2.end(),
inserter( si, si.begin() ) );
//並集
set_union( s.begin(), s.end(),
s2.begin(), s2.end(),
inserter( su, su.begin() ) );
//差集,s-s2
set_difference( s.begin(), s.end(),
s2.begin(), s2.end(),
inserter( sd, sd.begin() ) );
//對稱差集,s、s2中相互沒有的元素
set_symmetric_difference( s.begin(), s.end(),
s2.begin(), s2.end(),
inserter( ssd, ssd.begin() ) );
lower_bound() 返回指向大於(或等於)某值的第乙個元素的迭代器
key_comp() 返回乙個用於元素間值比較的函式,
使用方法
set > s1;
set>::key_compare kc1 = s1.key_comp( ) ;
bool result1 = kc1( 2, 3 ) ;
if( result1 == true )
set所有的操作的都是嚴格在logn時間之內完成,效率非常高。set和multiset的區別是:set插入的元素不能相同,但是multiset可以相同。hash_set在時間效能上比set要好一些
從大到小排序(需要自己寫comp函式)
const int n = 5;自動排序,紅黑樹,最快int cmp(int a,int b)
int main() ;
sort(a,a+n,cmp);//自定義以排序
return 0; }
(九)map,multimap
乙個key乙個value,查詢key都可以,可填入pair的一對,還可以排序等等,multimap可以重複
STL學習 容器
首先,明確的是,容器按照其內部的資料組織,分為關聯式和序列式 從上圖可以看到,heap內部含有乙個vector來實現底層儲存,priority queue又以heap為底層實現 stack和queue的實現都是依賴deque rb tree和hashtable是所有關聯式容器的底層資料結構。序列式容...
STL學習 順序容器
我以 vector 為例,總結一下 stl順序容器的基本使用。vector 是順序容器,它在很多方面類似於我們通常使用的陣列。但是它比陣列具有很多很好的特性。它使用安全,具有陣列所不具備的自增長的特性,使得 vector 在現代軟體設計中佔據重要地位。本講分五個部分,分別是初始化 迭代器 容器訪問 ...
C 學習 STL容器
vector 向量 線性容器 用標準模板,記得加上相應的標頭檔案 include include using namespace std int main 設定向量容量 初始化 v1 0 8 v1 1 8 v1 2 8 宣告迭代器 標準他屬於那個模板 vector iterator v1 iter ...