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