gpt4 book ai didi

c - 用于保存数据结构中元素计数的数据类型

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

我有一个动态数组,其中包含方法 pushpop 和对缓冲区的直接访问。凭直觉,我将包含数组包含的元素数量的字段设置为 size_t。现在,我添加了 insertdeleteindexOf 等方法。

但是,前两个期望 int 作为位置使用负索引从后面选择元素,indexOf 要么返回找到的位置,要么返回 -1 以指示失败,导致:

struct array {
size_t num;
char *buf;
}

void array_push(char c) {...}
char array_pop() {...}
void array_insert(int pos, char c) {...}
void array_delete(int pos) {...}
int array_indexOf(char c) {...}

使用 push/pop 和一个 for-loop over array.buf with array.num 我可以仍然可以访问最多 SIZE_MAX 个元素。 insertdelete 最多只能访问 INT_MAX 个元素,而 indexOf 无法返回超过 INT_MAX

您认为此实现是否正确,或者您将如何更改它?

size_t

pro:您最多可以有 SIZE_MAX 个元素

相反:您只能以有限的方式访问 INT_MAX 以上的部分

int

赞成:接口(interface)将与实现保持一致

contra:您不能以任何方式拥有超过 INT_MAX 个元素,而且 int 对象的大小也很不直观这就是 size_t

的目的

最佳答案

不要限制实现。将带有 size_t 参数的方法添加到接口(interface)。

void array_insert_beg(size_t pos, char c) {...}
void array_insert_end(size_t pos, char c) {...}
...
bool array_find(char c, size_t *index) {...}

关于c - 用于保存数据结构中元素计数的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27129025/

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