首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ STL 容器與迭代器完整速查手冊

     編輯:關於C++

迭代器分類

  • iterator:正向可讀寫
  • const_iterator:正向唯讀
  • reverse_iterator / const_reverse_iterator:反向

關鍵函式:begin(), end(), rbegin(), rend()

序列式容器共同介面

操作函式
建構constructor(n), constructor(n, val)
調整大小resize(n), resize(n, val)
賦值assign(n, val), assign(beg, end)
插入insert(pos, n, val), insert(pos, beg, end)
尾端插入push_back(val)
首尾存取front(), back()
尾端刪除pop_back()

三大序列容器差異

特性vectorlistdeque
底層結構動態陣列雙向鏈表分段連續陣列
隨機存取O(1) [], at()不支援O(1) [], at()
尾端增刪均攤 O(1)O(1)O(1)
頭端增刪O(n)O(1) push_front/pop_frontO(1) push_front/pop_front
中間增刪O(n)O(1) (已有迭代器)O(n)
記憶體碎片低高 (節點分配)中
迭代器失效擴容/插刪後失效僅被刪除元素失效插刪後失效

關聯式容器共同介面

  • 插入自動排序:insert(val)
  • 查找:find(val) → 迭代器或 end()
  • 允許重複容器 (multimap, multiset) 額外提供:
    • count(val):統計個數
    • lower_bound(val) / upper_bound(val):等值範圍
    • equal_range(val):回傳 pair<iter, iter>

四大關聯容器差異

容器鍵值對允許重複 Keyoperator[]
mappair<Key, Value>否是
multimappair<Key, Value>是否
setKey (值即鍵)否否
multisetKey是否

常用演算法速查

  • 遍歷/操作:for_each, transform
  • 查找:find, find_if, binary_search (需有序)
  • 排序:sort, stable_sort, partial_sort, nth_element
  • 複製/移動:copy, move, copy_backward
  • 修改:replace, remove (配合 erase), unique
  • 數值:accumulate, min_element, max_element, count, swap

容器配接器

  • stack<T>:push, pop, top, size, empty (LIFO)
  • queue<T>:push, pop, front, back, size, empty (FIFO)
  • priority_queue<T>:最大堆預設,top 為最大元素

範例程式碼精選

vector 異常安全存取:

try {
    cout << v[1000];     // 不檢查邊界
    cout << v.at(1000);  // 拋出 std::out_of_range
} catch (const std::exception& e) {
    cout << e.what();
}

list 排序去重:

li.sort();
li.unique(); // 僅移除相鄰重複,故需先排序

map 插入與遍歷:

map m;
m.insert({1001, "李明"});
m[1006] = "劉華"; // operator[] 會覆蓋既有 key
for (auto it = m.begin(); it != m.end(); ++it)
    cout << it->first << ':' << it->second << '\n';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved