定義:
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 用指標的方式來遍歷容器的資料 注 平時使用的時候大部分時候我們都用上了,但是面試的時候不能...