【发布时间】:2014-11-25 14:15:55
【问题描述】:
我有一个动态数组,其中包含 push、pop 方法并直接访问缓冲区。
直观地说,我使包含数组元素数量的字段包含size_t。现在我添加insert、delete 和indexOf 等方法。
但是,前两个期望 intas 位置使用负索引从后面选择元素,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 和array.buf 和array.num 的for 循环,我仍然可以访问最多SIZE_MAX 元素。 insert 和 delete 最多只能访问 INT_MAX 元素,而 indexOf 无法返回超过 INT_MAX 的位置。
您认为这个实现是正确的还是您会如何改变它?
size_t
pro:你最多可以有SIZE_MAX 个元素
反对:您只能以有限的方式访问INT_MAX 上方的部分
int
pro:接口将与实现保持一致
contra:你不能有超过INT_MAX元素,同样int对象的大小是不直观的,因为这是size_t的目的
【问题讨论】: