第三节 · 无限车厢 · 向量库
还记得数组吗?数组虽然好用,但有一个很大的限制——大小是固定的。一旦声明,就不能改变。
int arr[5]; // 只能存 5 个元素,不能多也不能少但在实际编程中,我们经常不知道需要存储多少数据。比如读取一个文件的内容,或者接收用户的输入——数据量是动态变化的。
C++ 标准库的 vector(向量)就是为此而生的。它就像一列可以无限添加车厢的火车,需要多少空间就有多少空间。
创建 vector
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v1; // 空 vector
vector<int> v2(5); // 5 个元素,都初始化为 0
vector<int> v3(5, 10); // 5 个元素,都初始化为 10
vector<int> v4 = {1, 2, 3, 4, 5}; // 用初始化列表
vector<int> v5(v4); // 复制 v4
// 打印 v4
for (int x : v4)
{
cout << x << " ";
}
cout << endl; // 输出: 1 2 3 4 5
return 0;
}vector<int> 表示存储 int 类型的向量。<> 中的类型称为模板参数,可以是任何类型:
添加和删除元素
访问元素
大小和容量
size() 是实际存储的元素个数,capacity() 是当前分配的空间能容纳的元素个数。reserve() 可以提前分配空间,减少多次扩容的开销。
遍历 vector
常用算法
结合 <algorithm> 头文件,可以对 vector 进行各种操作:
二维 vector
实用示例:读取未知数量的输入
vector vs 数组
特性
数组
vector
大小
固定
可变
内存管理
手动
自动
边界检查
无
at() 有
功能
基础
丰富
性能
略快
略慢(通常可忽略)
在大多数情况下,推荐使用 vector 而不是原生数组。它更安全、更方便,而且性能差距通常可以忽略不计。
习题
使用 vector 实现一个简单的待办事项列表:支持添加、删除和显示所有待办事项。
使用 vector 存储一系列学生成绩,计算平均分,并找出最高分和最低分。
实现一个程序,将用户输入的数字按升序和降序分别输出。
Last updated