C++中的vector
时间: 2023-05-12 08:07:21 浏览: 137
C++ vector
C语言中没有内置的vector数据结构,但可以通过手动实现动态数组来模拟vector的功能。动态数组可以通过malloc和realloc函数来动态分配和重新分配内存空间,从而实现动态增长。以下是一个简单的动态数组实现示例:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *data;
int size;
int capacity;
} Vector;
void vector_init(Vector *vec) {
vec->data = NULL;
vec->size = 0;
vec->capacity = 0;
}
void vector_push_back(Vector *vec, int value) {
if (vec->size == vec->capacity) {
vec->capacity = vec->capacity == 0 ? 1 : vec->capacity * 2;
vec->data = (int *)realloc(vec->data, vec->capacity * sizeof(int));
}
vec->data[vec->size++] = value;
}
int vector_get(Vector *vec, int index) {
if (index < 0 || index >= vec->size) {
printf("Index out of range\n");
exit(1);
}
return vec->data[index];
}
void vector_set(Vector *vec, int index, int value) {
if (index < 0 || index >= vec->size) {
printf("Index out of range\n");
exit(1);
}
vec->data[index] = value;
}
void vector_free(Vector *vec) {
free(vec->data);
vec->data = NULL;
vec->size = 0;
vec->capacity = 0;
}
int main() {
Vector vec;
vector_init(&vec);
vector_push_back(&vec, 1);
vector_push_back(&vec, 2);
vector_push_back(&vec, 3);
printf("%d\n", vector_get(&vec, 1));
vector_set(&vec, 1, 4);
printf("%d\n", vector_get(&vec, 1));
vector_free(&vec);
return 0;
}
```
这个示例中,我们定义了一个Vector结构体,包含一个指向动态数组的指针data,数组的大小size,以及数组的容量capacity。vector_init函数用于初始化一个空的动态数组,vector_push_back函数用于向数组末尾添加一个元素,vector_get和vector_set函数分别用于获取和设置数组中指定位置的元素。vector_free函数用于释放动态数组占用的内存空间。
阅读全文