標準程式庫 (standard library) 是依據 C++ 標準,隨編譯器 (compiler) 提供的程式庫 (library)
我們已經用過不少標準程式庫中的例子,例如於命令列印出字串 (string)
cout << m << endl;
完整程式請參考單元 1 - 認識 C++ 語言。
或是產生擬隨機整數
int a = rand() % 10;
完整程式請參考單元 16 - 繼續測試。
標準程式庫涵蓋各方面的應用,包括在最新標準 C++11 內,計有以下的標頭檔 (header file)
容器 (container) 相關
- <array>
- <bitset>
- <deque>
- <forward_list>
- <list>
- <map>
- <queue>
- <set>
- <stack>
- <unordered_map>
- <unordered_set>
- <vector>
通用相關
- <algorithm>
- <chrono>
- <functional>
- <iterator>
- <memory>
- <stdexcept>
- <tuple>
- <utility>
地方化相關
- <locale>
- <codecvt>
字串相關
- <string>
- <regex>
串流及輸出入相關
- <fstream>
- <iomanip>
- <ios>
- <iosfwd>
- <iostream>
- <istream>
- <ostream>
- <sstream>
- <streambuf>
語言相關
- <exception>
- <limits>
- <new>
- <typeinfo>
執行緒 (thread) 相關
- <thread>
- <mutex>
- <condition_variable>
- <future>
數學相關
- <complex>
- <random>
- <valarray>
- <numeric>
以及 C 標準程式庫。
如果要好好、詳細的介紹,那可能就是一本大部頭的書了說。倒是須注意,若引入標準程式庫中的標頭檔,需要用 using 設定命名空間 (name space) ,不然就得加上命名空間與作用域運算子 (scope operator) :: ,例如下面的程式計算迴圈執行時間
#include <ctime>
#include <iostream>
int main() {
time_t t1 = time(NULL);
unsigned long i = 1000000000;
std::cout << i << std::endl;
while (true) {
if (i == 0) {
break;
}
i--;
}
time_t t2 = time(NULL);
std::cout << t2 - t1 << std::endl;
return 0;
}
/* 《程式語言教學誌》的範例程式
http://kaiching.org/
檔名:time_test.cpp
功能:示範利用標準程式庫計算迴圈執行時間
作者:張凱慶 */
由於 cout 與 endl 都是屬於 std 定義的名稱,如果程式中沒有用
using namespace std;
或
using std::cout;
using std::cin;
using std::endl;
就得連帶 std:: 把完整名稱寫出來。
上例也引進標準程式庫中的 ctime ,用到裡頭的 time_t 型態與 time() 函數,因為 c 開頭的標準程式庫的標頭檔是從 C 語言延伸來的,由於 C 語言並沒有命名空間的概念,因此只要引進標頭檔就可直接使用裡頭定義的相關程式。
雖然 C++ 的標準程式庫提供非常豐富的資源,可是使用者介面 (user interface) 仍是沿襲 C 語言命令列 (command line) 的風格,因此我們要替 Encrypt 設計一個圖形使用者介面 (graphical user interface, GUI) 就得借助第三方程式庫 (third party library) 。所以接下來就讓我們繼續認識一下第三方程式庫 - Qt 吧!
相關教學影片
中英文術語對照 | |
---|---|
標準程式庫 | standard library |
編譯器 | compiler |
程式庫 | library |
字串 | string |
標頭檔 | header file |
容器 | container |
執行緒 | thread |
命名空間 | name space |
作用域運算子 | scope operator |
使用者介面 | user interface |
命令列 | command line |
圖形使用者介面 | graphical user interface, GUI |
第三方程式庫 | third party library |
重點整理 |
---|
1. 標準程式庫是依 C++ 標準隨編譯器提供的程式庫,第三方程式庫則是其他開發商提供程式庫。 |
2. 標準程式庫提供眾多的應用,包括容器、工具、地方資訊、字串、串流及輸出入、語言、執行緒、數學等應用。 |
3. 如果沒有用 using 使用標準程式庫的名稱,就要連帶用標準程式庫的命名空間及作用域運算子 std:: 。 |
問題與討論 |
---|
1. 為什麼要有標準程式庫?不能程式的所有功能都自己開發嗎? |
2. 什麼是命名空間?為什麼要用命名空間? |
3. 為什麼要有第三方程式庫?除了 Qt 外還有其他的第三方程式庫嗎? |
練習 |
---|
1. 寫一個程式 exercise2201.cpp ,利用標準程式庫中 string 的 string 與 algorithm 的 random_shuffle() ,攪亂字串 "0123456789" 的順序。 |
2. 承上題,這樣攪亂後的順序都是固定的,如果要重新執行程式而有所更改的話,需要提供第三個隨機函數的參數給 random_shuffle() ,另寫一個程式 exercise2202.cpp ,利用標準程式庫中 ctime 的 time() 與 cstdlib 的 rand() 、 srand() 設計隨機函數 myrandom() 。 |