当前位置:首页 C++ > 正文

vector 和数组,到底差在哪?

作者:野牛程序员:2026-04-07 08:40:24 C++阅读 1983
vector 和数组,到底差在哪?

vector 和数组,到底差在哪?

刚学 C++ 的时候,最先接触的是数组:

int a[10];

后来又会看到一种写法:

vector<int> v;

很多人第一反应是:
这俩不都是“存一堆数据”的吗?

确实功能有重叠,但用起来差别还是挺明显的。


先看最直观的一点:大小能不能变。

数组一旦定义好,长度就固定了:

int a[5];

想再多放一个元素?不行,只能重新定义。

vector 就灵活得多:

vector<int> v;
v.push_back(1);
v.push_back(2);

需要多少就加多少,自动扩容,不用操心空间问题。


再看用起来的“手感”。

数组更偏底层,写法也更“硬”一点:

a[0] = 10;
a[1] = 20;

vector 除了可以这样用:

v[0] = 10;

还多了一些很好用的功能:

v.push_back(30);   // 末尾加元素
v.pop_back();      // 删除最后一个
v.size();          // 当前有多少个元素

写起来会更顺手。


再说一个容易忽略的点:安全性。

数组不会帮检查越界:

a[10] = 100;  // 很可能直接出问题

程序可能崩,也可能悄悄写坏内存。

vector 提供了一种更安全的访问方式:

v.at(10);  // 越界会报错

当然,v[10] 这种写法还是不会检查,但至少多了一个更安全的选择。


内存这块也有点区别。

数组是在固定位置开一块连续空间,比较“死板”。
vector 底层也是连续空间,但会在不够用的时候自动换一块更大的地方,再把数据搬过去。

这就是为什么 vector 能动态增长。


性能上也可以简单说一下。

数组因为简单,访问速度非常快,也没有额外开销。
vector 在大多数情况下也很快,但在“扩容”的时候,会有一次整体复制的成本。

不过对于大多数练习和项目来说,这点差别基本感受不到。


什么时候用数组,什么时候用 vector

可以这样简单判断:

如果一开始就知道数据规模,而且不会变,用数组就够了,比如:

int a[100];

如果数据个数不确定,或者需要频繁增加、删除元素,用 vector 更省心。


最后把两者放在一起看一眼:

数组更像是“固定大小的盒子”,提前规定好能装多少。
vector 更像是“会自动变大的盒子”,不够装就自己扩展。


简单记一句就够用:

能确定大小,用数组
不确定大小,用 vector


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • vector 和数组,到底差在哪?
  • 相关推荐

    最新推荐

    热门点击