C++ Vector 怎么扩容?
时间: 2023-06-12 16:08:12 浏览: 67
在 C 语言中,如果我们使用动态数组实现 Vector,需要考虑到扩容的问题。下面是一种实现方式:
1. 定义结构体 `vector`,包含以下成员:
```c
typedef struct {
int *data;
int size;
int capacity;
} vector;
```
其中,`data` 指向动态数组的首地址,`size` 表示当前数组中元素的个数,`capacity` 表示数组的容量。
2. 实现初始化函数 `init_vector`,用于初始化一个 vector:
```c
void init_vector(vector *v) {
v->data = (int *)malloc(sizeof(int) * INIT_CAPACITY);
v->size = 0;
v->capacity = INIT_CAPACITY;
}
```
其中,`INIT_CAPACITY` 是一个预定义的常量,表示数组的初始容量。
3. 实现添加元素函数 `push_back`,用于在数组的末尾添加一个元素:
```c
void push_back(vector *v, int value) {
if (v->size == v->capacity) {
v->capacity *= 2;
v->data = (int *)realloc(v->data, sizeof(int) * v->capacity);
}
v->data[v->size++] = value;
}
```
如果数组已满,就将容量扩大一倍,并使用 `realloc` 函数重新分配内存。然后,在数组末尾添加新的元素。
需要注意的是,`realloc` 函数可能会返回空指针,因此在使用之前需要进行判断。
4. 实现释放函数 `free_vector`,用于释放动态数组占用的内存:
```c
void free_vector(vector *v) {
free(v->data);
v->size = 0;
v->capacity = 0;
}
```
这样,我们就实现了一个简单的动态数组 Vector,并且实现了扩容的功能。