gpt4 book ai didi

c - C++ vector 的最佳 C 实现是什么?

转载 作者:行者123 更新时间:2023-12-04 13:03:31 30 4
gpt4 key购买 nike

我一直在研究在 C++ 上使用 C,因为我发现它更清晰,而且我发现它缺少的主要内容是像数组这样的 vector 。

什么是最好的实现?

我只想能够调用诸如 vector_create、vector_at、vector_add 之类的东西。

最佳答案

编辑
这个答案来自一百万年前,但在某个时候,我实际上在 C 中实现了一个基于宏的、高效的、类型安全的 vector 工作,它涵盖了所有典型的功能和需求。你可以在这里找到它:
https://github.com/eteran/c-vector
原答案如下。

你想要复制的 vector 怎么样?我的意思是最后,这一切都归结为这样的事情:

int *create_vector(size_t n) {
return malloc(n * sizeof(int));
}

void delete_vector(int *v) {
free(v);
}

int *resize_vector(int *v, size_t n) {
return realloc(v, n * sizeof(int));
/* returns NULL on failure here */
}
你可以把这一切都包装在一个结构中,所以它也“知道它的大小”,但你必须为每种类型(这里的宏?)都这样做,但这似乎有点不必要......也许是这样的:
typedef struct {
size_t size;
int *data;
} int_vector;

int_vector *create_vector(size_t n) {
int_vector *p = malloc(sizeof(int_vector));
if(p) {
p->data = malloc(n * sizeof(int));
p->size = n;
}
return p;
}

void delete_vector(int_vector *v) {
if(v) {
free(v->data);
free(v);
}
}

size_t resize_vector(int_vector *v, size_t n) {
if(v) {
int *p = realloc(v->data, n * sizeof(int));
if(p) {
p->data = p;
p->size = n;
}
return v->size;
}
return 0;
}

int get_vector(int_vector *v, size_t n) {
if(v && n < v->size) {
return v->data[n];
}
/* return some error value, i'm doing -1 here,
* std::vector would throw an exception if using at()
* or have UB if using [] */
return -1;
}

void set_vector(int_vector *v, size_t n, int x) {
if(v) {
if(n >= v->size) {
resize_vector(v, n);
}
v->data[n] = x;
}
}
之后,你可以这样做:
int_vector *v = create_vector(10);
set_vector(v, 0, 123);
我不知道,这似乎不值得付出努力。

关于c - C++ vector 的最佳 C 实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826163/

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