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

C++ 標準庫精要:從 C++98 到 C++11 核心特性與 STL 完整指南

     編輯:關於C++

前言

本文整理自《The C++ Standard Library 2nd edition》及 cppreference,系統梳理 C++98/11 新增語言特性、標準庫組件、STL 容器/迭代器/算法體系、異常體系、輸入輸出流等核心知識點,供進階學習與速查參考。

一、C++98/11 關鍵語言特性演進

C++98 引入

  • 非類型模板參數:template<size_t N> class bitset;
  • 默認模板參數:template<typename T, typename Alloc = allocator<T>> class vector;
  • typename 關鍵字、成員模板、嵌套類模板、基本類型值初始化 T()。

C++11 重大更新

特性說明與示例
模板尖括號 `>>`vector<list<int>> 無需空格
nullptr類型安全的空指針常量
auto / decltype類型推導:auto x = 3.14; decltype(x) y = x;
統一初始化 `{}`vector<int> v{1,2,3}; 禁止縮窄轉換
範圍-based forfor (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。

Utilities 實用工具

  • 智能指針: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>(編譯期有理數運算)。

三、STL 容器·迭代器·算法

容器分類

類別容器底層結構迭代器類別
序列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, search
  • 修改序列:copy, transform, replace, remove, fill, generate
  • 分區/排序:partition, sort, stable_sort, nth_element
  • 二分查找:lower_bound, upper_bound, equal_range, binary_search
  • 集合操作:set_union, set_intersection, set_difference
  • 堆操作:make_heap, push_heap, pop_heap, sort_heap
  • 極值:min_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。

六、學習建議與參考資源

  1. 先掌握容器選型原則:隨機訪問用 vector/deque,頻繁中間插刪用 list/forward_list,鍵值查找用 map/unordered_map。
  2. 理解迭代器失效規則(vector 擴容、deque 分段存儲、list 節點穩定)。
  3. 善用 <algorithm> 避免手寫循環;組合算法解決複雜問題。
  4. 智能指針優先:unique_ptr 為默認選擇,shared_ptr 僅在共享所有權時使用。
  5. 參考書籍:《The C++ Standard Library》Nicolai Josuttis;《Effective Modern C++》Scott Meyers。在線權威:cppreference.com。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved