1.vector不确定元素个数,可以往里添加;
2.数组确定个数;
vector
和数组(array)是两种常用的数据结构,它们在 C++ 中有着不同的特点和用途。以下是它们的主要区别:
1. 定义与大小
-
数组:
- 在定义时需要指定大小,大小是固定的。
- 一旦定义,数组的大小不能改变。
- 例如:
int arr[5];
定义了一个包含 5 个整数的数组。
-
vector:
- 是 C++ STL(标准模板库)中的动态数组,大小可以动态调整。
- 可以根据需要添加或删除元素。
- 例如:
std::vector<int> vec;
可以随时使用vec.push_back(1);
添加元素。
2. 内存管理
-
数组:
- 内存分配在栈上(对于局部数组)或在静态存储区(对于全局数组),不需要手动管理。
- 不能自行调整大小,超出大小会导致越界错误。
-
vector:
- 内存管理是动态的,通常在堆上分配内存。
- 当元素超出当前容量时,会自动扩展容量(通常是两倍),并复制现有元素到新内存中。
3. 功能与灵活性
-
数组:
- 功能简单,主要用于存储同一类型的数据。
- 不支持直接的添加、删除操作,需手动实现。
-
vector:
- 提供丰富的成员函数,如
push_back()
,pop_back()
,insert()
,erase()
等,便于操作。 - 支持迭代器,易于与算法结合使用。
- 提供丰富的成员函数,如
4. 性能
-
数组:
- 由于大小固定,性能较高,访问速度快,内存开销小。
- 适合用于性能要求高且数据量固定的场合。
-
vector:
- 由于动态调整内存,可能出现内存重分配,性能稍低。
- 但在大多数情况下,性能开销是可以接受的,且提供了更好的灵活性。
5. 安全性
-
数组:
- 缺乏边界检查,访问越界会导致未定义行为。
-
vector:
- 提供边界检查(通过
at()
方法),如果越界会抛出异常,增加了安全性。
- 提供边界检查(通过
总结
- 使用 数组 时,适合于固定大小、性能敏感的场合。
- 使用 vector 时,适合于需要动态大小和灵活操作的场合。
根据具体需求选择合适的数据结构,可以提高程序的性能和可维护性。