gpt4 book ai didi

c - 如何使用类似容器的方式在 C 中添加可变长度数据

转载 作者:太空宇宙 更新时间:2023-11-04 05:58:20 24 4
gpt4 key购买 nike

在 C 中,我希望有一个结构可以不时接收特定类型的新数据(比如一个表示当前温度的浮点值)。现在的问题是我不知道随着时间的推移我会得到多少这样的数据(软件保持打开的时间越长,我收到的数据越多),我也不想限制我的结构的数据量会接受。

我如何在 C 中执行此操作?

为了建立关系,这相当于在 C++ 中,声明一个具有 Vector 或 List 的结构,并在每次出现新数据时连续调用 vector::push_back(T),能够这样做直到所有内存都在PC 被消耗。现在,据我所知,C 中没有可用的容器,例如 vector 或列表,那么该怎么做呢?

谢谢,

莫吉尔

最佳答案

这是我刚才写的一个例子:

主.c

#include "queue.h"

int main() {
vector_handle v = vector_create();

int i;
for (i=0; i<100; ++i)
vector_push(v, 0.5 * i);

for (i=0; i<vector_size(v); ++i)
printf("data: %f\n", vector_data(v)[i]);

vector_destroy(v);
}

队列.h

#pragma once
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct vector * vector_handle;

vector_handle vector_create();
void vector_destroy(vector_handle vector);
void vector_realloc(vector_handle vector);
size_t vector_size(vector_handle vector);
float * vector_data(vector_handle vector);
void vector_push(vector_handle vector, float data);
float vector_pop(vector_handle vector);

队列.c

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

#include "queue.h"

struct vector {
float *data;
size_t size;
size_t capacity;
};

struct vector * vector_create() {
struct vector *object = malloc(sizeof(struct vector));
object->size = 0;
object->capacity = 16;
object->data = malloc(sizeof(float) * object->capacity);
return object;
}

void vector_destroy(struct vector *object) {
free(object->data);
free(object);
}

void vector_realloc(struct vector *object) {
object->capacity *= 2;
object->data = realloc(object->data, sizeof(float) * object->capacity);
assert(object->data);
}

size_t vector_size(struct vector *object) {
return object->size;
}

float * vector_data(struct vector *object) {
return object->data;
}

void vector_push(struct vector *object, float data) {
if (object->size == object->capacity)
vector_realloc(object);
object->data[object->size] = data;
object->size++;
}

float vector_pop(struct vector *object) {
return object->data[object->size--];
}

关于c - 如何使用类似容器的方式在 C 中添加可变长度数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23066070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com