第三节 · 无限车厢 · 向量库

还记得数组吗?数组虽然好用,但有一个很大的限制——大小是固定的。一旦声明,就不能改变。

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