C++ 向量
C++ 向量
C++ 中的向量类似于可调整大小的 数组.
向量和数组都是用于存储相同数据 类型 的多个元素的数据结构。
数组和向量之间的区别在于,数组的大小不可修改(无法添加或删除数组中的元素)。但是,向量可以根据需要增大或缩小其大小。
若要使用向量,必须包含 <vector>
头文件
// 包含向量库
#include <vector>
创建向量
若要创建向量,请使用 vector
关键字,并在尖括号 <>
中指定它应存储的值的 类型,然后指定向量的名称,例如:vector<type> vectorName
。
示例
// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars;
如果要声明时添加元素,请将它们放在花括号 {}
中,以逗号分隔,就像数组一样
示例
// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 打印向量元素
for (string car : cars) {
cout << car << "\n";
}
尝试一下 »
注意:向量的类型(我们示例中的 string
)在声明后无法更改。
访问向量
可以通过在方括号 []
内引用索引号来访问向量元素。
向量与数组一样,也是从 0 开始索引的,这意味着 [0]
是第一个元素,[1]
是第二个元素,依此类推
示例
// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 获取第一个元素
cout << cars[0]; // 输出 Volvo
// 获取第二个元素
cout << cars[1]; // 输出 BMW
尝试一下 »
使用向量库的一个好处是它包含许多有用的函数。例如,可以使用 .front()
和 .back()
函数访问向量的第一个或最后一个元素
示例
// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 获取第一个元素
cout << cars.front();
// 获取最后一个元素
cout << cars.back();
尝试一下 »
若要访问指定索引处的元素,可以使用 .at()
函数并指定索引号
示例
// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 获取第二个元素
cout << cars.at(1);
// 获取第三个元素
cout << cars.at(2);
尝试一下 »
注意:与方括号 []
相比,.at()
函数通常更受欢迎,因为它可以在发生错误时通知您。
例如,如果元素超出范围
示例
// 创建一个名为 cars 的向量,用于存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 尝试访问不存在的元素(会抛出错误消息)
cout << cars.at(6);
尝试一下 »
更改向量元素
若要更改特定元素的值,可以引用索引号
示例
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
尝试一下 »
添加向量元素
向量和数组之间最大的区别是向量可以动态增长。这意味着可以向向量添加或删除元素。
若要向向量添加元素,可以使用 .push_back()
函数,该函数会在向量末尾添加一个元素
可以添加任意数量的元素
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars.push_back("Tesla");
cars.push_back("VW");
cars.push_back("Mitsubishi");
cars.push_back("Mini");
尝试一下 »
删除向量元素
若要从向量中删除元素,可以使用 .pop_back()
函数,该函数会从向量末尾删除一个元素
注意:元素通常只从向量的末尾添加和删除。如果需要从两端添加或删除元素,通常最好使用 双端队列 而不是向量。
向量大小
若要了解向量有多少元素,请使用 .size()
函数
检查向量是否为空
还有一个函数可以确定向量是否为空。
如果向量为空,.empty()
函数会返回 1
(true),如果它包含一个或多个元素,则会返回 0
(false)
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
cout << cars.empty(); // 输出 0(不为空)
尝试一下 »
循环遍历向量
可以使用 for
循环结合 .size()
函数循环遍历向量元素
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (int i = 0; i < cars.size(); i++) {
cout << cars[i] << "\n";
}
尝试一下 »
您还可以使用 for-each 循环(在 C++ 版本 11(2011)中引入),它更简洁、更易读
示例
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (string car : cars) {
cout << car << "\n";
}
尝试一下 »
提示:还可以使用 迭代器 循环遍历向量,您将在后面的章节中详细了解。
完整向量参考
有关向量函数的完整参考,请访问我们的 C++ 向量参考。