这里我有一个指向第一个元素的指针和一个int来保存元素的数量。如何在内存分配中添加malloc和calloc?
struct vector_new
{
char *start;
int count;
}
答案 0 :(得分:5)
vector = malloc(sizeof(struct vector_new))
vector->start = malloc(size);
vector->count = size;
我不确定你要求的是什么。
BTW,std :: vector有一个“已用”大小和一个“已分配”大小,这是一个你不会在这里重现的语义。我也同意你不可能比std :: vector写得更快。可能有理由使用C而不是C ++,但这不是其中之一。
答案 1 :(得分:3)
您正在寻找“动态阵列”实施。
您可以跟踪数组中当前有多少对象以及为其分配的空间量。如果您需要更多空间,请拨打realloc
并要求current_size * factor
factor
大于1。 factor
的典型值介于1.4和2之间。
可以证明,向数组附加n
项的摊销成本为O(n)。
请注意,如果您想将内容插入中间,则 不 效率很高。那是一个不同的生物。
答案 2 :(得分:0)
我不确定我理解你的问题,但这就是你要找的东西:
vector_new vec;
vec.count = 10;
vec.start = malloc(vec.count);