C++標準庫(std)詳解——目錄
- C++標準庫(`std`)詳解
- 一、命名空間(`namespace`)
- 二、主要組件
- 1. 輸入輸出流(`<iostream>`)
- 2. 字符串處理(`<string>`)
- 3. STL容器(`<vector>`,` <list>`,` <map>`, `<set>`等)
- 4. 算法(`<algorithm>`)
- 5. 數值處理(`<numeric>`)
- 6. 函數對象與可調用對象(`<functional>`)
- 7. 異常處理(`<exception>`)
- 8. 時間日期(`<chrono>`)
- 9. 文件系統(`<filesystem>`)
- 10. 線程支持(`<thread>`,` <mutex>`,` <condition_variable>`等)
- 11. 正則表達式(`<regex>`)
C++標準庫(std
)詳解
C++是一種功能強大的編程語言,其標準庫(std
)提供了豐富的功能和工具,幫助開發者高效地進行編程。本文將詳細介紹C++標準庫的主要組成部分及其使用方法。
一、命名空間(namespace
)
在C++中,標準庫的所有內容都定義在std
命名空間中。這是為了避免與用戶自定義的函數或類名發生沖突。使用std
命名空間有兩種主要方式:
- 顯式指定:每次使用標準庫中的函數或類時,都加上
std::
前綴,例如std::cout
、std::vector
。 - 使用聲明:通過
using
關鍵字引入特定的名稱,例如using std::cout;
,這樣在當前作用域內就可以直接使用cout
而無需加std::
前綴。
二、主要組件
1. 輸入輸出流(<iostream>
)
<iostream>
頭文件提供了用于控制臺輸入輸出的功能,主要包括:
std::cin
:標準輸入流,通常用于從鍵盤讀取輸入。std::cout
:標準輸出流,用于向控制臺輸出信息。std::cerr
:標準錯誤流,用于輸出錯誤信息,通常不帶緩沖。std::clog
:標準日志流,用于輸出日志信息,通常帶緩沖。
示例代碼:
#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;int a;std::cin >> a;std::cout << "You entered: " << a << std::endl;return 0;
}
2. 字符串處理(<string>
)
<string>
頭文件提供了std::string
類,用于處理字符串。常用操作包括:
std::string
:表示字符串對象。std::getline
:從輸入流中讀取一行字符串。str.size()
:返回字符串的長度。str.substr(pos, len)
:獲取子字符串。str1 + str2
:字符串拼接。
示例代碼:
#include <iostream>
#include <string>int main() {std::string str1 = "Hello";std::string str2 = "World";std::string result = str1 + ", " + str2 + "!";std::cout << result << std::endl;return 0;
}
3. STL容器(<vector>
, <list>
, <map>
, <set>
等)
C++標準庫提供了多種容器類,用于存儲和管理數據。常見的容器包括:
std::vector
:動態數組,支持隨機訪問。std::list
:雙向鏈表,支持快速插入和刪除。std::map
:關聯容器,存儲鍵值對,按鍵排序。std::set
:集合容器,存儲唯一元素,自動排序。
示例代碼(使用std::vector
):
#include <iostream>
#include <vector>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}
4. 算法(<algorithm>
)
<algorithm>
頭文件提供了許多通用算法,可以應用于各種容器。常用算法包括:
std::sort
:對容器中的元素進行排序。std::find
:查找容器中的某個元素。std::count
:統計容器中滿足條件的元素個數。std::copy
:將一個容器的元素復制到另一個容器。
示例代碼:
#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {5, 3, 1, 4, 2};std::sort(numbers.begin(), numbers.end());for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}
5. 數值處理(<numeric>
)
<numeric>
頭文件提供了一些數學運算相關的函數,例如:
std::accumulate
:計算容器中元素的累加和。std::inner_product
:計算兩個容器的內積。
示例代碼:
#include <iostream>
#include <vector>
#include <numeric>int main() {std::vector<int> numbers = {1, 2, 3, 4, 5};int sum = std::accumulate(numbers.begin(), numbers.end(), 0);std::cout << "Sum: " << sum << std::endl;return 0;
}
6. 函數對象與可調用對象(<functional>
)
<functional>
頭文件提供了函數對象和可調用對象的包裝器,例如:
std::function
:通用的可調用對象包裝器,可以存儲任何可調用對象(如函數、Lambda表達式、函數對象)。std::bind
:綁定函數參數,生成新的可調用對象。
示例代碼:
#include <iostream>
#include <functional>void printSquare(int x) {std::cout << x * x << std::endl;
}int main() {std::function<void(int)> func = printSquare;func(5); // 輸出 25return 0;
}
7. 異常處理(<exception>
)
<exception>
頭文件提供了標準異常類,用于處理程序中的異常情況。常見的異常類包括:
std::exception
:基類,提供what()
方法返回異常描述。std::runtime_error
:運行時錯誤異常。std::logic_error
:邏輯錯誤異常。
示例代碼:
#include <iostream>
#include <exception>int main() {try {throw std::runtime_error("An error occurred");} catch (const std::exception& e) {std::cout << "Caught exception: " << e.what() << std::endl;}return 0;
}
8. 時間日期(<chrono>
)
<chrono>
頭文件提供了處理時間和日期的功能,例如:
std::chrono::system_clock
:系統時鐘,用于獲取當前時間。std::chrono::duration
:表示時間段。std::chrono::time_point
:表示時間點。
示例代碼:
#include <iostream>
#include <chrono>
#include <thread>int main() {auto now = std::chrono::system_clock::now();std::cout << "Current time: " << std::chrono::system_clock::to_time_t(now) << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));return 0;
}
9. 文件系統(<filesystem>
)
<filesystem>
頭文件提供了操作文件系統的功能,例如:
std::filesystem::path
:表示文件路徑。std::filesystem::exists
:檢查文件是否存在。std::filesystem::create_directory
:創建目錄。std::filesystem::remove
:刪除文件或目錄。
示例代碼:
#include <iostream>
#include <filesystem>namespace fs = std::filesystem;int main() {fs::path p = "example.txt";if (fs::exists(p)) {std::cout << p << " exists" << std::endl;} else {std::cout << p << " does not exist" << std::endl;}return 0;
}
10. 線程支持(<thread>
, <mutex>
, <condition_variable>
等)
C++11引入了多線程支持,相關頭文件包括:
std::thread
:表示線程對象。std::mutex
:互斥鎖,用于保護共享數據。std::condition_variable
:條件變量,用于線程間同步。
示例代碼:
#include <iostream>
#include <thread>
#include <mutex>std::mutex mtx;void printMessage(const std::string& message) {std::lock_guard<std::mutex> lock(mtx);std::cout << message << std::endl;
}int main() {std::thread t1(printMessage, "Hello from thread 1");std::thread t2(printMessage, "Hello from thread 2");t1.join();t2.join();return 0;
}
11. 正則表達式(<regex>
)
<regex>
頭文件提供了正則表達式相關的類和函數,用于字符串的模式匹配和搜索。常用功能包括:
std::regex
:表示正則表達式對象。std::regex_match
:檢查整個字符串是否匹配正則表達式。std::regex_search
:搜索字符串中與正則表達式匹配的部分。std::regex_replace
:替換字符串中與正則表達式匹配的部分。
示例代碼:
#include <iostream>
#include <regex>
#include <string>int main() {std::string text = "Hello, World!";std::regex pattern("\\bWorld\\b"); // 匹配單詞 "World"if (std::regex_search(text, pattern)) {std::cout << "Match found!" << std::endl;} else {std::cout << "No match found." << std::endl;}return 0;
}