写一个C++程序中vector的例子
时间: 2024-05-11 17:17:59 浏览: 100
C 语言中没有内置的 `vector` 数据结构,但是可以通过自己实现动态数组来模拟 `vector` 的功能。
以下是一个简单的动态数组实现:
```c
#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) {
int new_capacity = vec->capacity == 0 ? 1 : vec->capacity * 2;
int *new_data = (int *)realloc(vec->data, new_capacity * sizeof(int));
if (new_data == NULL) {
fprintf(stderr, "Out of memory\n");
exit(1);
}
vec->data = new_data;
vec->capacity = new_capacity;
}
vec->data[vec->size++] = value;
}
int vector_get(Vector *vec, int index) {
if (index < 0 || index >= vec->size) {
fprintf(stderr, "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) {
fprintf(stderr, "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("Size: %d, Capacity: %d\n", vec.size, vec.capacity);
for (int i = 0; i < vec.size; i++) {
printf("%d ", vector_get(&vec, i));
}
printf("\n");
vector_set(&vec, 1, 4);
printf("Size: %d, Capacity: %d\n", vec.size, vec.capacity);
for (int i = 0; i < vec.size; i++) {
printf("%d ", vector_get(&vec, i));
}
printf("\n");
vector_free(&vec);
return 0;
}
```
该程序使用 `struct` 定义了一个动态数组类型 `Vector`,包含了一个指向整型数组的指针、数组的大小、数组的容量等成员。`vector_init` 函数用于初始化数组,`vector_push_back` 函数用于在数组末尾添加元素,`vector_get` 函数用于获取指定位置的元素,`vector_set` 函数用于修改指定位置的元素,`vector_free` 函数用于释放数组的内存空间。在 `main` 函数中,我们首先初始化了一个数组,然后添加了三个元素,打印出数组的大小和容量以及元素内容,接着修改了第二个元素的值,再次打印出数组的大小和容量以及元素内容,最后释放了数组的内存空间。
阅读全文