如何在C中编写自己的矢量结构

时间:2011-06-06 21:27:18

标签: c optimization vector

这里我有一个指向第一个元素的指针和一个int来保存元素的数量。如何在内存分配中添加malloc和calloc?

struct vector_new           
  {
  char *start;
  int count;
  }

3 个答案:

答案 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);