介绍vector resize
时间: 2025-04-20 12:50:46 浏览: 24
<think>嗯,用户问的是关于vector的resize方法,需要详细介绍。首先,我得回想一下C++中vector的resize是做什么用的。vector是动态数组,resize用来调整它的大小。可能有默认值填充或者指定值填充两种情况。
应该先解释resize的基本功能,比如改变元素数量。然后讲两种重载形式:一种只调大小,另一种可以指定填充值。要区分resize和reserve的不同,reserve是预分配内存,不改变size,而resize会改变size,可能增加或减少元素。
需要注意扩容时的机制,比如当新size超过capacity时,vector会重新分配内存,复制原有元素,这会影响性能。还要提到缩小size时的情况,后面的元素会被销毁,capacity可能不变。
可能用户在实际使用中会遇到问题,比如误用resize导致元素被截断或者多余元素填充默认值。需要举例子说明两种情况,比如扩大和缩小vector的情况,展示代码示例,说明结果。
另外,对比resize和其他方法,比如clear、shrink_to_fit的区别。比如clear只是size变0,capacity不变,而resize可以调整到任意大小。shrink_to_fit是请求减少capacity到适合当前size,但实现可能不同。
最后,总结使用resize的注意事项,比如性能考虑,避免频繁调整大小,正确使用参数,避免不必要的默认构造。这样用户能全面了解resize的作用和使用场景。</think>`vector::resize()` 是 C++ 标准库中 `std::vector` 容器的一个重要成员函数,用于动态调整容器的大小。以下是详细说明:
---
### 核心功能
1. **调整元素数量**
当新大小(`new_size`) > 当前大小(`size()`)时:
- 扩容容器,新增元素默认值初始化(通过元素类型的**默认构造函数**)
- 或通过第二个参数指定填充值
当新大小 < 当前大小时:
- 截断容器,丢弃超出部分的元素(调用元素析构函数)
---
### 函数重载
```cpp
void resize(size_type new_size); // 默认填充新元素
void resize(size_type new_size, T value); // 指定填充值
```
---
### 关键特性
1. **内存管理**
- 扩容时若超过当前容量(`capacity()`),触发重新分配内存(原有迭代器失效)
- 缩小大小时**不会释放内存**,容量保持不变(`shrink_to_fit()`可请求缩减容量)
2. **时间复杂度**
- 扩容:$O(n)$,n为新增元素数量
- 缩容:$O(1)$(仅销毁多余元素)
---
### 示例代码
```cpp
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3};
// 扩容到5,新增元素默认初始化为0
vec.resize(5);
// vec: [1,2,3,0,0]
// 扩容到8,新增元素初始化为100
vec.resize(8, 100);
// vec: [1,2,3,0,0,100,100,100]
// 缩容到3
vec.resize(3);
// vec: [1,2,3]
}
```
---
### 对比相关方法
| 方法 | 行为 | 影响容量 |
|-----------------|-------------------------------|----------|
| `resize(n)` | 调整元素数量 | 可能增加 |
| `reserve(n)` | 预分配内存,不改变元素数量 | 可能增加 |
| `clear()` | 移除所有元素(size→0) | 不影响 |
| `shrink_to_fit` | 请求缩减容量匹配当前size | 可能减少 |
---
### 使用场景
1. 预分配已知数量的存储空间
2. 动态调整数据处理缓冲区大小
3. 快速清空容器内容(`vec.resize(0)`)
---
### 注意事项
1. **性能敏感场景**避免频繁调整大小
2. 对象类型必须满足:
- 默认构造函数(用于无参`resize`)
- 可拷贝/移动构造(扩容时旧元素迁移)
3. 指定填充值时,值类型必须与元素类型匹配
通过合理使用`resize()`,可以更高效地管理动态数组的内存和内容。
阅读全文
相关推荐















