【STL和泛型編程】1. STL基礎和容器名稱
1. STL 六大部件
STL的部件(Components)
- 容器(Containers)
- 分配器(Allocator)
- 算法(Algorithms)
- 迭代器(Iterators)
- 適配器(Adapters)——進行轉換
- 仿函數(Functors)

這里是一個使用了全部6種STL部件的代碼案例
#include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; int main() { int p[6] = { 27, 210, 12, 47, 109, 83 }; // 容器(container): vector // 分配器(allocator): allocator<int> vector<int, allocator<int>> vi(p, p + 6); // 迭代器(iterator): vi.begin(), vi.end(); // 算法(algorithm): count_if (操作整個容器的頭到尾) // 適配器(adapter): not1: 相反的, bind2nd: 綁定第二個參數 // 仿函數(function): 比他小 cout << count_if(vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40))); // 計數:所有比40大的數 }
2. 迭代器(iterator)
// 獲取一個迭代器 vector<int> vint; vector<int>::iterator it = vint.begin(); // C++11 for(auto elem : vint) { std::cout << elem << std::endl; }
3. 容器分類(container)
3.1 隊列容器
- Array:事先分配元素個數的數組
- Vector:可以在尾部進行數組容量的擴充
- Deque:雙端隊列,可以在頭部和尾部插入元素(pop_front、pop_back,push_front,push_back)
- Queue:隊列,可以在尾部排隊,頭部離開
- List:雙向鏈表
- Forward-List:單項鏈表
3.2 關系容器
- Set / Multiset:直接存儲Value
- Map / Multimap:存儲Key/Value,通過Key查找Value
- Unordered Set / Multiset:不進行排序
- Unordered Map / Multimap:不進行排序

-
array<int, 100> myArray:聲明一個長度為100的array數組
- vector<int> myVector:聲明一個變量類型為int的vector數組
- size() 當前元素個數
- capacity() 容量
- front() 第一個元素
- back() 最后一個元素
- data() 元素起始地址
- list<int> myList:聲明一個變量類型為int的雙向鏈表
- size() 當前元素個數
- max_size() 最大分配數量
- front() 首元素
- back() 為元素
- deque<int> myDeque:聲明一個變量類型為int的雙端隊列(沒有iterator,否則會破壞它的性質)
- queue:只保留了先進先出
- stack:只保留了后進先出
- multiset<int> myMultiSet:底層使用紅黑樹實現,插入完成排序
- insert() 插入元素
- size() 元素個數
- max_size() 最大存儲數量
- find() 查找元素
- multimap<int, string> myMulitMap:底層使用紅黑樹實現,插入完成排序
- insert() 插入元素(自己完成組合 pair<int, string>)
- unordered_multiset<int> myUnMuSet:底層使用哈希表(開鏈法)
- bucket_count() 籃子的數量(大于元素數量)
- bucket_size(int n) 某個籃子內元素數量(可能為0)
- load_factor() 載重因子
- max_load_factor() 最大載重因子
- unordered_multimap<int, string> myUnMuMap:底層使用哈希表(開鏈法)

浙公網安備 33010602011771號