c语言vector用法
时间: 2023-10-13 13:27:31 浏览: 37
C语言中没有内置的向量(vector)容器,但可以自己实现一个类似于向量的动态数组,以下是一个简单的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int* data;
int size;
int capacity;
} vector;
vector* vec_create() {
vector* vec = (vector*)malloc(sizeof(vector));
vec->data = (int*)malloc(sizeof(int) * 2);
vec->size = 0;
vec->capacity = 2;
return vec;
}
void vec_destroy(vector* vec) {
free(vec->data);
free(vec);
}
void vec_push_back(vector* vec, int elem) {
if (vec->size == vec->capacity) {
vec->capacity *= 2;
vec->data = (int*)realloc(vec->data, sizeof(int) * vec->capacity);
}
vec->data[vec->size++] = elem;
}
int vec_size(vector* vec) {
return vec->size;
}
int vec_get(vector* vec, int index) {
if (index < 0 || index >= vec->size) {
printf("vector index out of range!");
exit(1);
}
return vec->data[index];
}
void vec_set(vector* vec, int index, int elem) {
if (index < 0 || index >= vec->size) {
printf("vector index out of range!");
exit(1);
}
vec->data[index] = elem;
}
int main() {
vector* vec = vec_create();
vec_push_back(vec, 1);
vec_push_back(vec, 2);
vec_push_back(vec, 3);
vec_push_back(vec, 4);
vec_push_back(vec, 5);
for (int i = 0; i < vec_size(vec); i++) {
printf("%d ", vec_get(vec, i));
}
vec_set(vec, 2, 6);
printf("\n");
for (int i = 0; i < vec_size(vec); i++) {
printf("%d ", vec_get(vec, i));
}
vec_destroy(vec);
return 0;
}
```
以上代码实现了一个简单的向量容器,使用方法类似于STL中的vector。vec_create用于创建向量,vec_push_back用于向向量末尾添加元素,vec_size用于获取向量的大小,vec_get用于获取指定下标的元素,vec_set用于修改指定下标的元素,vec_destroy用于销毁向量。