C++ 向量
C++ Vector
C++ 中的 vector 類似於一個可調整大小的 陣列。
向量和陣列都是用於儲存同一資料型別多個元素的 資料結構。
陣列和向量的區別在於,陣列的大小無法修改(你不能向陣列中新增或刪除元素)。然而,向量可以根據需要增長或縮小。
要使用 vector,你必須包含 <vector>
標頭檔案
// 包含 vector 庫
#include <vector>
建立 Vector
要建立 vector,請使用 vector
關鍵字,並在尖括號 <>
中指定它應儲存的值的**型別**,然後是 vector 的名稱,例如:vector<type> vectorName
。
示例
// 建立一個名為 cars 的 vector,用於儲存字串
vector<string> cars;
如果你想在宣告時就新增元素,請將它們放在用逗號分隔的列表中,用花括號 {}
包圍,就像陣列一樣
示例
// 建立一個名為 cars 的 vector,用於儲存字串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 列印 vector 元素
for (string car : cars) {
cout << car << "\n";
}
自己動手試一試 »
注意: Vector 的型別(我們示例中的 string
)在聲明後無法更改。
訪問 Vector
你可以透過方括號 []
中的索引號來訪問 vector 元素。
Vector 和陣列一樣,都是從 0 開始索引的,這意味著 [0]
是第一個元素,[1]
是第二個元素,依此類推。
示例
// 建立一個名為 cars 的 vector,用於儲存字串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 獲取第一個元素
cout << cars[0]; // 輸出 Volvo
// 獲取第二個元素
cout << cars[1]; // 輸出 BMW
自己動手試一試 »
使用 vector 庫的一個優點是它包含許多有用的函式。例如,你可以使用 .front()
和 .back()
函式來訪問 vector 的第一個或最後一個元素。
示例
// 建立一個名為 cars 的 vector,用於儲存字串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 獲取第一個元素
cout << cars.front();
// 獲取最後一個元素
cout << cars.back();
自己動手試一試 »
要訪問指定索引處的元素,可以使用 .at()
函式並指定索引號。
示例
// 建立一個名為 cars 的 vector,用於儲存字串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 獲取第二個元素
cout << cars.at(1);
// 獲取第三個元素
cout << cars.at(2);
自己動手試一試 »
注意: .at()
函式通常比方括號 []
更受歡迎,因為它可以在發生錯誤時通知你。
例如,如果元素超出範圍
示例
// 建立一個名為 cars 的 vector,用於儲存字串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 嘗試訪問不存在的元素(會丟擲錯誤訊息)
cout << cars.at(6);
自己動手試一試 »
更改 Vector 元素
要更改特定元素的值,可以引用索引號。
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 更改第一個元素的值
cars[0] = "Opel";
cout << cars[0]; // 現在輸出 Opel 而不是 Volvo
自己動手試一試 »
但是,使用 .at()
函式更安全。
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 更改第一個元素的值
cars.at(0) = "Opel";
cout << cars.at(0); // 現在輸出 Opel 而不是 Volvo
自己動手試一試 »
新增 Vector 元素
Vector 和陣列之間最大的區別在於,Vector 可以動態增長。這意味著你可以向 Vector 中新增或刪除元素。
要向 Vector 新增元素,可以使用 .push_back()
函式,它會在 Vector 的末尾新增一個元素。
你可以新增任意數量的元素。
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars.push_back("Tesla");
cars.push_back("VW");
cars.push_back("Mitsubishi");
cars.push_back("Mini");
自己動手試一試 »
刪除 Vector 元素
要從 Vector 中刪除元素,可以使用 .pop_back()
函式,它會刪除 Vector 末尾的一個元素。
注意: 元素通常只在 Vector 的末尾新增和刪除。如果你需要在兩端都新增或刪除元素,通常最好使用 deque 而不是 vector。
Vector 大小
要了解 Vector 中有多少個元素,請使用 .size()
函式。
檢查 Vector 是否為空
還有一個函式可以用來檢查 vector 是否為空。
.empty()
函式如果 vector 為空則返回 1
(true),如果包含一個或多個元素則返回 0
(false)。
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.empty(); // 輸出 0 (非空)
自己動手試一試 »
迴圈遍歷 Vector
你可以使用 for
迴圈結合 .size()
函式來遍歷 vector 元素。
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (int i = 0; i < cars.size(); i++) {
cout << cars[i] << "\n";
}
自己動手試一試 »
你還可以使用**基於範圍的 for 迴圈**(在 C++11 (2011) 版本中引入),這種方式更簡潔,可讀性更好。
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (string car : cars) {
cout << car << "\n";
}
自己動手試一試 »
提示: 也可以使用 迭代器 來遍歷 vector,你將在後面的章節中學習更多相關知識。
完整的 Vector 參考
有關 Vector 函式的完整參考,請訪問我們的 C++ Vector 參考。