1. 内存本质

  • 普通数组静态内存,固定大小,不能扩容;栈上分配,空间有限。
  • vector动态数组,堆上分配,可自动扩容,大小灵活可变。

2. 大小是否可变

  • 数组:定义后大小固定,不能改。
  • vector:随时增删元素,自动扩容,支持动态增长。

3. 内存空间

  • 数组:内存连续,但大小写死。
  • vector:堆上连续内存,底层也是连续数组,支持随机访问。

4. 越界安全

  • 数组:[] 不做越界检查,越界直接崩溃、乱码。
  • vector:
    • [] 不检查
    • .at() 带越界检查,越界抛异常,更安全。

5. 自带功能

  • 普通数组:只有存数据,无任何成员方法。
  • vector:自带 size、capacity、empty、push_back、erase、clear、reserve 等丰富接口。

6. 初始化与赋值

  • 数组:不能整体赋值、不能直接拷贝。
  • vector:支持拷贝构造、直接赋值、容器互换。

7. 迭代器支持

  • 数组:没有迭代器,不能直接用 STL 算法。
  • vector:支持迭代器,可直接用 sort、find、for_each 等 STL 算法。

8. 生命周期

  • 数组:栈数组随函数结束自动释放;全局数组程序结束释放。
  • vector:对象销毁自动释放堆内存,不用手动管理内存,不容易泄漏。

一句话总结

数组固定大小、不能扩容、功能少、不安全;vector 动态扩容、堆内存管理、接口丰富、支持迭代器、更安全好用。

更多推荐