有没有不定长可存储任意类型的基于c++的容器
时间: 2024-05-03 18:22:57 浏览: 6
有,可以使用指针和动态内存分配实现一个基于C的通用容器。可以使用void指针作为容器的元素类型,以便能够存储任意类型的数据。容器的大小可以根据需要进行调整,因为它使用动态内存分配来管理存储空间。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define INIT_CAPACITY 10
typedef struct {
void **data;
int size;
int capacity;
} Vector;
Vector *create_vector() {
Vector *vector = malloc(sizeof(Vector));
vector->data = malloc(sizeof(void *) * INIT_CAPACITY);
vector->size = 0;
vector->capacity = INIT_CAPACITY;
return vector;
}
void destroy_vector(Vector *vector) {
free(vector->data);
free(vector);
}
void ensure_capacity(Vector *vector, int capacity) {
if (capacity > vector->capacity) {
int new_capacity = vector->capacity * 2;
while (new_capacity < capacity) {
new_capacity *= 2;
}
vector->data = realloc(vector->data, sizeof(void *) * new_capacity);
vector->capacity = new_capacity;
}
}
void add_element(Vector *vector, void *element) {
ensure_capacity(vector, vector->size + 1);
vector->data[vector->size++] = element;
}
void *get_element(Vector *vector, int index) {
if (index < 0 || index >= vector->size) {
return NULL;
}
return vector->data[index];
}
int main() {
Vector *vector = create_vector();
int *a = malloc(sizeof(int));
*a = 10;
add_element(vector, a);
char *b = malloc(sizeof(char));
*b = 'a';
add_element(vector, b);
float *c = malloc(sizeof(float));
*c = 3.14;
add_element(vector, c);
int *d = get_element(vector, 0);
printf("%d\n", *d);
char *e = get_element(vector, 1);
printf("%c\n", *e);
float *f = get_element(vector, 2);
printf("%f\n", *f);
destroy_vector(vector);
return 0;
}
```
这个示例代码中的容器可以存储任何类型的数据,只需要将数据的指针作为元素添加到容器中即可。容器内部使用动态内存分配来管理存储空间,因此可以在运行时动态调整容器的大小。