stl容器學習目錄

2021-06-15 10:29:35 字數 4042 閱讀 1892

vector和list的比較熟悉,乙個單鏈表,乙個雙鏈表(push_pack,insert, erase,list的sort功能(great()),還有演算法那個庫)

slist,只能用pushfront()

(三)deque容器(雙端佇列)

說明

#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元素互換。

(四)stack

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 ...