C++ 向量
C++ 向量
C++ 中的向量 (vector) 是一种可动态调整大小的数组。
向量和数组都是用于存储相同数据类型元素的数据结构。
数组与向量的区别在于:数组的大小不可修改(无法增删元素),而向量可以根据需要自动扩容或缩容。
使用向量需要包含 <vector>
头文件:
// 引入 vector 库 #include <vector>
创建 Vector
使用 vector
关键字创建向量,在尖括号 <>
内指定存储的数据类型,然后命名向量,语法为:
vector<type> vectorName
实例
// 创建一个存储字符串的向量,命名为 cars vector<string> cars;
若要在声明时初始化元素,可以使用大括号 {}
包裹逗号分隔的列表(与数组类似):
实例
// 创建并初始化一个存储字符串的向量 vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 打印 vector 元素 for (string car : cars) { cout << car << "\n"; }
注意:向量的类型(如本例中的 string
)在声明后不可更改。
访问 Vector 元素
通过方括号 []
内指定索引号来访问元素。
与数组类似,向量的索引从 0 开始,即 [0]
是第一个元素,[1]
是第二个,依此类推:
实例
// 创建一个存储字符串的向量,命名为 cars vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 获取第一个元素 cout << cars[0]; // 输出 Volvo // 获取第二个元素 cout << cars[1]; // 输出 BMW
vector 库的优势在于提供了许多实用函数。例如,可以用 .front()
和 .back()
分别访问首尾元素:
实例
// 创建一个存储字符串的向量,命名为 cars vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 获取第一个元素 cout << cars.front(); // 输出 Volvo // 获取最后一个元素 cout << cars.back(); // 输出 Tesla
要访问指定索引处的元素,可以使用 .at()
函数并指定索引号:
实例
// 创建一个名为 cars 的向量,用于存储字符串 vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 获取第二个元素 cout << cars.at(1); // 获取第三个元素 cout << cars.at(2);
注意:通常更推荐使用 .at()
函数而非方括号 []
,因为当元素超出范围时,.at()
函数会抛出错误信息:
实例
// 创建一个名为 cars 的向量,用于存储字符串 vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 尝试访问不存在的元素(将抛出异常) cout << cars.at(6);
修改向量元素
要更改特定元素的值,可以引用其索引号:
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 更改第一个元素的值 cars[0] = "Opel"; cout << cars[0]; // 现在输出 Opel 而非 Volvo
然而,使用 .at()
函数更为安全:
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; // 更改第一个元素的值 cars.at(0) = "Opel"; cout << cars.at(0); // 现在输出 Opel 而非 Volvo
添加向量元素
向量和数组的最大区别在于,向量可以动态增长。这意味着可以向向量中添加或删除元素。
要向向量中添加元素,可以使用 .push_back()
函数,该函数会在向量的末尾添加一个元素:
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; cars.push_back("Audi");
可以添加任意数量的元素:
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; cars.push_back("Audi"); cars.push_back("VW"); cars.push_back("BYD"); cars.push_back("Mini");
删除向量元素
要从向量中删除元素,可以使用 .pop_back()
函数,该函数会从向量的末尾删除一个元素:
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; cars.pop_back();
向量大小
要了解向量中有多少个元素,可以使用 .size()
函数:
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; cout << cars.size(); // 输出 4
检查向量是否为空
还有一个函数可以用来判断向量是否为空。
.empty()
函数在向量为空时返回 1
(true),在向量包含一个或多个元素时返回 0
(false):
实例
vector<string> cars; cout << cars.empty(); // 输出 1(向量为空)
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; cout << cars.empty(); // 输出 0(向量不为空)
遍历向量
可以使用 for
循环结合 .size()
函数来遍历向量元素:
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; for (int i = 0; i < cars.size(); i++) { cout << cars[i] << "\n"; }
也可以使用 C++ 11(2011 年)引入的 for-each 循环,这种方式更简洁、更易读:
实例
vector<string> cars = {"Volvo", "BMW", "Ford", "Tesla"}; for (string car : cars) { cout << car << "\n"; }
提示:还可以使用迭代器来遍历向量,这将在后续章节中详细介绍。