·standard template library(stl)
·標準版模板庫stl包含常用演算法和資料結構的通用庫
·stl的核心內容是3個基本元件:
·容器·演算法
·迭代器
容器
·向量vector
·線性表list
·佇列queue
·對映map
·集合set
·字串string
常用演算法
排序 sort()
查詢 find()
替換 replace()
合併 merge()
反序 reverse()
統計 count()
迭代器
iterator
·向量是乙個容量可變的順序容器,順序容器中的元素嚴格按照線性順序存放。可以通過下標隨機訪問對應的元素。
·向量vector類可用來支援動態陣列,動態陣列是指可以根據需要自動改變大小的陣列。
vector類物件的宣告:
vector <
int> iv;
vector <
double
>dv(
5);vector <
char
>cv(
5);vector
sv2(8)
;
例子1
vector <
char
> v;
//建立乙個長度為零的向量
int i;
//將10個字母存放到向量物件v中
for(i=
0; i<
10; i++
) v.
push_back
('a'
+i);
//採用下標訪問向量中的內容
for(i=
0; i<
10; i++
) cout<
<<
" "
;cout<
//通過迭代器訪問向量中的內容
vector <
char
>
:: iterator p=v.
begin()
;while
(p!=v.
end())
例子2
#include
#include
#include
#include
using
namespace std;
void
load
(vector&)
;void
print
(vector);
const
int size=8;
intmain()
void
load
(vector
& v)
//用下標的方式給vector向量進行賦值
void
print
(vector v)
//列印輸出vector向量內容
標準庫中的函式模板sort()
template
<
class
randlter
>
void
sort
(randlter start, randlter end)
;template
<
class
randlter
,class
comp
>
void
sort
(randlter start, randlter end, comp cmpfn)
;//可實現公升序排序或者降序排序
·線性表list類定義了雙向的線性表,又可稱為雙向鍊錶。list類只支援順序訪問。示例
#include
#include
#include
using
namespace std;
intmain()
cout<
lst.
sort()
;//對線性表list進行排序
cout<<
"sorted contents: "
;//排序之後的內容
p=lst.
begin()
;while
(p!=lst.
end())
cout<
return0;
}
·佇列(queue)是乙個先進先出(fifo)的資料結構,在程式設計中經常使用。
·佇列常用的操作有,在佇列尾增加乙個元素、在佇列頭取乙個元素以及測試佇列是否為空、是否為滿等操作。
示例
#include
#include
#include
using
namespace std;
intmain()
stl中的集合容器與數學中的集合概念有些相似。
stl的集合容器是乙個有序容器。
示例#include
#include
#include
using
namespace std;
intmain()
set::iterator at=source.
begin()
; cout<
while
(at!=source.
end())
//輸出的字串為排序後的字串,且重複字串只儲存乙個
cout<<
*at++
<
}
set集合容器通常採用平衡二叉樹實現,在插入元素時,它能自動調整二叉樹的排序,把該元素放到適當的位置。
以確保每個子樹根節點的鍵值大於左子樹所有節點的鍵值,而小於右子樹的鍵值。
另外,還得確保左子樹的高度與右子樹的高度相等,這樣,二叉樹的高度最小,從而檢索速度最快。
set容器中,在插入元素時,就會自動將元素按照鍵值由小到大的順序排序。
平衡二叉檢索樹的檢索使用中序遍歷演算法,檢索效率高於vector、deque和list等容器。
構造set集合容器的主要目的就是為了快速檢索。
set與multiset的區別
multiset
可以插入完全相同的兩條記錄
會提高資料插入的速度
set不可以插入完全相同的兩條記錄
保證記錄的唯一性
由於需要查重處理,會降低資料插入的速度
可以作為一種去重的方法
對映map類定義了乙個關聯容器,並且在容器中使用唯一的關鍵字來對映相應的值。
map類物件是一系列關鍵字/值的匹配對。
map的功能在於:只要知道了乙個值的關鍵字,就可以找到這個值。
每個節點都是關鍵字key和值value的匹配對。
示例
#include
#include
#include
using
namespace std;
intmain()
C 標準庫之queue(各函式及其使用全)
一 fifo佇列,即先入先出佇列 1.佇列的宣告 std deque mydeck 3,100 deque with 3 elements std list mylist 2,200 list with 2 elements std queue first empty queue std queue...
C 標準庫型別 bitset及其應用
bitset 物件用每乙個bit位儲存0或1,可以用來標記存在或者不存在,位置下標和儲存內容組成乙個key value對。用bit標記的好處就是可以節省記憶體空間,特別是應用於海量資料處理中。例如以下幾個問題 1 已知某個檔案內包含一些 號碼,每個號碼為8位數字,統計不同號碼的個數 2 2.5億個整...
C 標準庫bind函式
上篇部落格在為大家介紹lambda是先由find if函式引入問題,由於find if函式的第三個引數所要求的可呼叫物件只能由乙個謂詞,所以我們最後選擇的解決方法是用lambda表示式。那麼此問題還有其他的解決方法麼?本篇部落格我就為大家帶來新的解決方法bind函式 bind函式的最根本的作用就是可...