本文整理自《The C++ Standard Library 2nd edition》及 cppreference,系統梳理 C++98/11 新增語言特性、標準庫組件、STL 容器/迭代器/算法體系、異常體系、輸入輸出流等核心知識點,供進階學習與速查參考。
template<size_t N> class bitset;template<typename T, typename Alloc = allocator<T>> class vector;typename 關鍵字、成員模板、嵌套類模板、基本類型值初始化 T()。| 特性 | 說明與示例 |
|---|---|
| 模板尖括號 `>>` | vector<list<int>> 無需空格 |
nullptr | 類型安全的空指針常量 |
auto / decltype | 類型推導:auto x = 3.14; decltype(x) y = x; |
| 統一初始化 `{}` | vector<int> v{1,2,3}; 禁止縮窄轉換 |
| 範圍-based for | for (auto& e : v) ... |
| 移動語義 / 右值引用 | T&&、std::move、std::forward |
| Lambda 表達式 | [=](int x){ return x*2; } |
constexpr | 編譯期常量表達式 |
| 可變參數模板 | template<typename... Args> void f(Args... args); |
| 模板別名 | template<typename T> using Vec = vector<T>; |
| 作用域枚舉 | enum class Color { Red, Green }; |
| 新類型 | char16_t, char32_t, long long, nullptr_t |
std, std::chrono, std::regex_constants, std::placeholders, std::this_thread 等。
exception
├─ logic_error (domain_error, invalid_argument, length_error, out_of_range)
├─ runtime_error (range_error, overflow_error, underflow_error)
├─ bad_alloc
├─ bad_cast
├─ bad_typeid
├─ bad_exception
└─ ios_base::failure
C++11 棄用動態異常規範,改用 noexcept。
unique_ptr(獨佔)、shared_ptr(共享,需配合 enable_shared_from_this)、weak_ptr(打破循環引用)。<type_traits> 提供編譯期類型查詢/轉換(is_integral, remove_reference, add_rvalue_reference 等)。function<R(Args...)>、bind、mem_fn。<chrono>(時鐘/時長/時間點)、<ratio>(編譯期有理數運算)。| 類別 | 容器 | 底層結構 | 迭代器類別 |
|---|---|---|---|
| 序列 | array, vector, deque, list, forward_list | 動態數組/雙端隊列/雙向/單向鏈表 | RandomAccess / Bidirectional / Forward |
| 關聯 | set, multiset, map, multimap | 紅黑樹 | Bidirectional |
| 無序關聯 | unordered_set/map... | 哈希表 | Forward |
| 適配器 | stack, queue, priority_queue | 封裝底層容器 | 無 |
OutputIterator → 單向寫 (ostream_iterator)
InputIterator → 單向讀 (istream_iterator)
ForwardIterator → 多遍前向讀 (forward_list, unordered_*)
Bidirectional → 雙向讀 (list, map/set)
RandomAccess → 隨機訪問 (vector, deque, string, array)
<algorithm>)find, count, equal, mismatch, searchcopy, transform, replace, remove, fill, generatepartition, sort, stable_sort, nth_elementlower_bound, upper_bound, equal_range, binary_searchset_union, set_intersection, set_differencemake_heap, push_heap, pop_heap, sort_heapmin_element, max_element, minmax_element注意:remove 並不真正刪除元素,只是將目標元素移至末尾並返回新尾迭代器,需配合 erase 使用。
ios_base
├─ basic_ios<CharT, Traits>
├─ basic_istream<CharT, Traits> → istream, wistream
├─ basic_ostream<CharT, Traits> → ostream, wostream
└─ basic_iostream<CharT, Traits> → iostream, wiostream
全局對象:cin, cout, cerr, clog。流狀態標誌:good(), eof(), fail(), bad()。操縱子:hex, dec, oct, fixed, scientific, setprecision, setw, setfill。
Callable 概念:函數指針、函數引用、成員函數指針、數據成員指針、仿函數(重載 operator())、Lambda。標準庫以 std::function、std::bind、std::thread 統一接受 Callable。
vector/deque,頻繁中間插刪用 list/forward_list,鍵值查找用 map/unordered_map。vector 擴容、deque 分段存儲、list 節點穩定)。<algorithm> 避免手寫循環;組合算法解決複雜問題。unique_ptr 為默認選擇,shared_ptr 僅在共享所有權時使用。