C++ Deque
C++ Deque
在上一頁中,您學習了 佇列 中的元素是在末尾新增,在開頭移除。
而 deque(代表 double-ended queue,雙端佇列)則更靈活,因為元素可以從兩端(開頭和末尾)新增和移除。您也可以透過索引號訪問元素。
要使用 deque,您必須包含 <deque>
標頭檔案
// 包含 deque 庫
#include <deque>
建立 Deque
要建立一個 deque,請使用 deque
關鍵字,並在尖括號 <>
中指定它要儲存的值的型別,然後是 deque 的名稱,例如: deque<type> dequeName
。
示例
// 建立一個名為 cars 的 deque,它將儲存字串
deque<string> cars;
如果您想在宣告時就新增元素,請將它們放在花括號 {}
中,用逗號分隔的列表中
示例
// 建立一個名為 cars 的 deque,它將儲存字串
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 列印 deque 元素
for (string car : cars) {
cout << car << "\n";
}
自己動手試一試 »
注意: Deque 的型別(在我們的示例中為 string
)在聲明後不能更改。
訪問 Deque
您可以透過方括號 []
中的索引號來訪問 deque 元素。
Deque 是從 0 開始索引的,這意味著 [0]
是第一個元素,[1]
是第二個元素,以此類推。
示例
// 建立一個名為 cars 的 deque,它將儲存字串
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 獲取第一個元素
cout << cars[0]; // 輸出 Volvo
// 獲取第二個元素
cout << cars[1]; // 輸出 BMW
自己動手試一試 »
您還可以使用 .front()
和 .back()
函式來訪問 deque 的第一個或最後一個元素
示例
// 建立一個名為 cars 的 deque,它將儲存字串
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 獲取第一個元素
cout << cars.front();
// 獲取最後一個元素
cout << cars.back();
自己動手試一試 »
要訪問指定索引處的元素,可以使用 .at()
函式並指定索引號
示例
// 建立一個名為 cars 的 deque,它將儲存字串
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 獲取第二個元素
cout << cars.at(1);
// 獲取第三個元素
cout << cars.at(2);
自己動手試一試 »
注意: .at()
函式通常比方括號 []
更受青睞,因為它會在元素超出範圍時丟擲錯誤訊息。
示例
// 建立一個名為 cars 的 deque,它將儲存字串
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 嘗試訪問一個不存在的元素(將丟擲異常)
cout << cars.at(6);
自己動手試一試 »
修改 Deque 元素
要更改特定元素的值,可以引用索引號
示例
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 更改第一個元素的值
cars[0] = "Opel";
cout << cars[0]; // 現在輸出 Opel 而不是 Volvo
自己動手試一試 »
但是,使用 .at()
函式更安全
示例
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 更改第一個元素的值
cars.at(0) = "Opel";
cout << cars.at(0); // 現在輸出 Opel 而不是 Volvo
自己動手試一試 »
新增 Deque 元素
要向 deque 新增元素,您可以使用 .push_front()
在 deque 的開頭插入元素,並使用 .push_back()
在末尾新增元素。
示例
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 在開頭新增一個元素
cars.push_front("Tesla");
// 在末尾新增一個元素
cars.push_back("VW");
自己動手試一試 »
移除 Deque 元素
要從 deque 中移除元素,請使用 .pop_front()
從 deque 的開頭移除元素,並使用 .pop_back()
在末尾移除元素。
示例
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 移除第一個元素
cars.pop_front();
// 移除最後一個元素
cars.pop_back();
自己動手試一試 »
Deque 大小
要找出 deque 中有多少個元素,請使用 .size()
函式
檢查 Deque 是否為空
使用 .empty()
函式來判斷 deque 是否為空。
.empty()
函式在 deque 為空時返回 1
(true),否則返回 0
(false)。
示例
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.empty(); // 輸出 0 (非空)
自己動手試一試 »
遍歷 Deque
您可以使用 for
迴圈結合 .size()
函式來遍歷 deque 元素。
示例
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (int i = 0; i < cars.size(); i++) {
cout << cars[i] << "\n";
}
自己動手試一試 »
您也可以使用基於範圍的 for 迴圈(在 C++ 11 (2011) 版本中引入),這種方式更簡潔,可讀性也更好。
示例
deque<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (string car : cars) {
cout << car << "\n";
}
自己動手試一試 »
提示: 也可以使用 迭代器 來遍歷 deque,這將在後面的章節中詳細介紹。