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

标签 c arrays count int size-t

我有一个动态数组,其中包含方法 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/

相关文章:

ruby - 在 Ruby 中用 Nil 替换数组中的空单元格?

mysql - 如何从Mysql取回没有统计数据的日子的数据

image-processing - 如何在 Octave 3.8.2 中计算红细胞/圆圈

c - 如何将包含作为命令行参数传递的整数的字符串转换为整数数组

ios - 如何比较图像数组以在ios中查找重复图像

C 内存泄漏问题

c - 无法确定指针数组的大小

php - 如何使用特定条件计算 SQL 表中的行数?

c - MPI_Scatterv 不起作用

c - "gsl/gsl_rng.h' 文件未找到”OSX El Capitan 升级后