c语言vector用法
时间: 2023-10-13 18:14:59 浏览: 372
C语言中没有内置的vector数据结构,但是可以用数组模拟vector。
实现vector主要需要以下几个操作:
1.初始化vector,可以给定一个初始大小,也可以为空。
2.向vector中添加元素,如果存储空间不足,需要重新分配内存。
3.删除vector中的元素,同样需要重新分配内存。
4.访问vector中的元素,可以通过下标或者迭代器来访问。
5.获取vector的当前大小、容量等状态信息。
以下是一个简单的vector实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int* data;
int size;
int capacity;
} vector;
void vector_init(vector* vec, int init_capacity) {
vec->data = (int*)malloc(init_capacity * sizeof(int));
vec->size = 0;
vec->capacity = init_capacity;
}
void vector_push_back(vector* vec, int val) {
if (vec->size == vec->capacity) {
vec->capacity *= 2;
vec->data = (int*)realloc(vec->data, vec->capacity * sizeof(int));
}
vec->data[vec->size++] = val;
}
void vector_pop_back(vector* vec) {
if (vec->size > 0) {
vec->size--;
if (vec->size < vec->capacity / 2) {
vec->capacity /= 2;
vec->data = (int*)realloc(vec->data, vec->capacity * sizeof(int));
}
}
}
int vector_get(vector* vec, int index) {
if (index < 0 || index >= vec->size) {
printf("vector index out of range\n");
return -1;
}
return vec->data[index];
}
int vector_size(vector* vec) {
return vec->size;
}
int vector_capacity(vector* vec) {
return vec->capacity;
}
int main() {
vector vec;
vector_init(&vec, 10);
vector_push_back(&vec, 1);
vector_push_back(&vec, 2);
vector_push_back(&vec, 3);
printf("vector size: %d, capacity: %d\n", vector_size(&vec), vector_capacity(&vec));
printf("vector[0]: %d, vector[1]: %d, vector[2]: %d\n", vector_get(&vec, 0), vector_get(&vec, 1), vector_get(&vec, 2));
vector_pop_back(&vec);
printf("vector size: %d, capacity: %d\n", vector_size(&vec), vector_capacity(&vec));
printf("vector[0]: %d, vector[1]: %d\n", vector_get(&vec, 0), vector_get(&vec, 1));
return 0;
}
```
这个vector的实现基于动态数组,支持动态扩容和缩容,可以用来存储任意类型的数据。但需要注意的是,由于C语言不支持泛型,所以需要自己实现各种类型的vector,或者使用类似C++的模板来统一实现。
阅读全文