用法 stl 常用C 標準模板庫(STL)

2021-10-25 12:22:07 字數 4945 閱讀 6704

定義:

vectorinstname;

typename可以是任何基本型別,結構體或stl標準容器.

2. 遍歷訪問:

1) 通過下標;2) 通過迭代器:

for(vector::iterator it = vi.begin(); it != vi.end(); it++) 

//vec[i]和 *(vi.begin()+i)等價

3. 常用函式:

push_back(); //尾部新增元素,複雜度o(1)

pop_back(); //尾部刪除元素,複雜度o(1)

size(); //獲取元素個數

clear(); //清空所有元素,複雜度o(n)

insert(it,value); //向任意迭代器it處插入乙個元素value, 複雜度o(n)

erase(); //可刪除單個元素:erase(it),或刪除區間[first, larst)內所有元素:erase(first_it, last_it)

4. 常見用途:

1) 儲存資料; 2) 鄰接表儲存圖;

set,集合,為內部自動有序(note: 增序)且不含重複元素的容器,內部由紅黑樹實現。相似的容器為multiset,內部可以允許有重複元素;unordered_set,可以去重但是無序,內部由雜湊實現,速度比set要快很多。

定義:

setinstname;

2. 訪問:一般通過迭代器訪問

set::iterator it; //通過*it訪問set的元素,但注意只能使用for-loop列舉,不支援*(it+i)的方式訪問

//note: 只有vector和string支援*(it+i)的訪問方式

3. 常用函式:

insert(); //insert(x)將x插入容器中,時間複雜度o(logn)

find(); //返回set中對應值為value的迭代器,時間複雜度o(logn)

erase(); //可刪除單個元素:erase(it),複雜度o(1);或刪除區間[first, larst)內所有元素:erase(first_it, last_it),複雜度o(logn)

size(); //獲取set內元素個數,複雜度o(1)

clear(); //清空set中所有元素,複雜度o(n)

定義:

string str;

string str = "example string";

2. 訪問:可通過下標或迭代器,與vector基本類似

3. 常用函式:

//operator+=, 用於字串拼接

//compare operator: ==、!=、<=、>=等,基於字典序比較大小

length()/size(); //返回string長度

insert(); //插入字串,複雜度o(n)

//insert(pos, string)-->在pos未知插入字串string

//insert(it, it2, it3)-->迭代器指示的string it位置上插入串[it2,it3]

erase(); //刪除單個或區間內元素,與vector中erase用法基本一致,複雜度o(n)

clear(); //清空,複雜度o(1)

substr(); //substr(pos, len)返回pos位置開始長度為len的字串,複雜度o(len)

find();

當str2是str的字串時,返回其在str中第一次出現的位置,否則返回string:npos

str2), 從str的pos位置開始匹配, 複雜度o(mn), m、n為str和str2的長度

string:npos; //常數(=-1, or 4294967295, max value of unsigned_int),一般作為find函式失配時的返回值

replace(); //replace(pos, len, str2), 把str從pos號位開始長度為len的字串替換為str2;

//replace(it1, it2, str2), 把str的迭代器[it1, it2)範圍的字串替換為str2; 複雜度為o(str.length())

對映,可以將任何基本型別對映到任何基本型別(包含stl容器);內部由紅黑樹實現,因此建立對映過程中自動有序(從小到大);若需要乙個key對應多個值,可以使用multimap;c++11中增加了雜湊實現的unordered_map,速度比紅黑樹實現的map要快很多.

常用用途為:

1) 需要建立字串與整數/字串間的對映;2) 潘丹大整數或其他型別資料是否存在時,把map當bool陣列使用;

定義

mapinstname;

2. 訪問:通過下標或迭代器

通過迭代器訪問時,it->first用來訪問key, it->second用來訪問value

3. 常用函式

find(); //find(key)返回鍵為key的對映迭代器,時間複雜度o(logn)

erase(); //可刪除單個元素:erase(it),複雜度o(1);erase(key),刪除鍵為key的鍵值對,複雜度o(logn)

size(); //獲取元素個數,複雜度o(1)

clear(); //清空元素,複雜度o(n)

實現先進先出(fifo)的容器,常用於bfs實現;類似的還有雙端佇列(deque),首尾均可插入和刪除;

定義

queueinstname;

2. 訪問

front(); //訪問隊首元素

back(); //訪問隊尾元素

3. 常用函式

push(); //入隊,複雜度o(1)

pop(); //出隊,複雜度o(1)

empty(); //判空,複雜度o(1)

優先佇列,預設將佇列優先順序最高(e.g.,最大)元素置於隊首,底層使用堆實現,可以用於解決一些貪心問題,及用於需要用到堆的場合;

定義

priority_queueinstname;

2. 訪問

top(); //訪問隊首(堆頂)元素

3. 常用函式

push(); //push(x),將x入隊,複雜度o(logn)

pop(); //隊首元素出隊,複雜度o(logn)

empty(); //判空,複雜度o(1)

size(); //返回元素個數,複雜度o(1)

4. 優先順序設定方法

priority_queue, cmp_fn> instname;

第二個引數vector用於承載底層資料結構堆(heap)的容器;第三個引數為對第乙個引數的比較類,不同的資料型別有不同的實現。

對於基本資料型別(int, double, char等),cmp_fn 可使用 less: 數字大的優先順序大,以及greater: 數字小的優先順序大;對於結構體,需要過載小於號"<",示例寫法:

//method1

struct example_struct

}//method2

struct cmp_fn

}

後進先出的容器,

基本定義方式:

stackinstname;

常用函式

push(); //元素入棧,複雜度o(1)

top(); //獲得棧頂元素,複雜度o(1)

pop(); //彈出棧頂元素,複雜度o(1)

empty(); //判空,複雜度o(1)

常用於將兩個元素**成為合成元素,以及用於構造map的鍵值對;

定義

pairinstname;

//example1:

pairp("example",0);

//example2:

make_pair("example",0);

2. 常用函式

//比較運算元,預設先以first大小作為標準,當fisrt相等時使用second;

min(x, y); 

max(x, y);

abs(x); //求絕對值

swap(x, y); //交換x和y的值

reverse(it2, it2); //將陣列指標或容器迭代器在[it1,it2)範圍內的元素進行翻轉

next_permutation(); //給出序列在全排列中的下乙個序列

fill(); //對陣列或容器中某段區間賦值為某個相同的值

//實現比較函式的tip: 當cmp(a,b)為true時a放在b之前

//stl標準容器中,vector, string, deque支援sort,內部本身有序的那種不支援排序

lower_bound(first, last, val); //查詢陣列或容器的[first, last)範圍內第乙個值大於等於val元素的位置,返回陣列指標或容器該位置的迭代器

upper_bound(first, last, val);//查詢陣列或容器的[first, last)範圍內第乙個值大於val元素的位置,返回陣列指標或容器該位置的迭代器

《演算法筆記》,胡凡,曾磊,機械工業出版社.

C 標準模板庫 STL 常用演算法

algorithm中的函式 find start,end,value start搜尋的起點,end搜尋的終點,要尋找的value值 find a.begin a.end value find a,a length,val 所有的返回,均是迭代器 容器 或指標 陣列 而非是直觀感覺上的索引下標。如果在...

C 標準模板庫STL

stl是標準c 庫的一部分。stl模板類為c 提供了完善的資料結構和演算法。stl的特點 型別引數化 即stl的 中可處理任意自定義型別的物件。泛型程式設計 generic programming 它以模板為基礎,弱化了 實體型別的差異,簡化了程式設計時問題抽象的模型,提供了更好的 封裝性和彈性。s...

C 標準模板庫STL

stl 標準模板庫 包括容器,演算法,迭代器 容器用來儲存資料,比如vector,list,堆疊等,string也算 一共有八個 演算法就是對容器進行操作,比如增刪改查資料 迭代器用來遍歷容器itreator 用指標的方式來遍歷容器的資料 注 平時使用的時候大部分時候我們都用上了,但是面試的時候不能...