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";
}
提示:还可以使用迭代器来遍历向量,这将在后续章节中详细介绍。