Sep 30, 2025
array、vector、list的区别
下面分别介绍 C++ 标准库中的 array、vector 和 list 的区别:
array 和 vector 的区别
| 特性 | array | vector |
|---|---|---|
| 定义方式 | std::array<T, N> |
std::vector<T> |
| 容量 | 固定(编译期已知大小) | 动态(运行时可扩展) |
| 内存分配 | 通常在栈上(连续空间) | 在堆上(连续空间) |
| 能否改变大小 | 不能,创建后大小固定 | 可以自动扩容/缩小 |
| 性能 | 访问速度快(和原生数组一样) | 访问速度快,扩容时有开销 |
| 用途 | 大小已知且固定的数组 | 需频繁增删元素的场景 |
举例:
1 | std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 固定长度,不能扩容 |
vector 和 list 的区别
| 特性 | vector | list |
|---|---|---|
| 底层结构 | 数组(连续内存) | 双向链表 |
| 访问速度 | 随机访问快(O(1)) | 随机访问慢(O(n)) |
| 插入/删除 | 尾部效率高,头部/中间慢 | 任意位置插入/删除都快 |
| 内存使用 | 连续空间,内存碎片少 | 每个节点有额外指针开销 |
| 适用场景 | 需频繁随机访问或尾部操作 | 需频繁在中间插入/删除 |
举例:
1 | std::vector<int> v = {1, 2, 3}; |
总结:
array:大小固定,适合已知长度的数组。vector:动态数组,适合大量随机访问和尾部插入。list:链表,适合频繁在任意位置插入/删除,但不适合随机访问。