大小未知的动态数组

我想在C中编写一个程序,用户输入2个数字a和b.

0< a< INT_MAX a< b< INT_MAX 该程序检查a和b之间有多少Prime数,并将所有Prime数保存在动态数组中. 对于malloc函数,我需要数组的大小,这意味着我必须首先检查所有数字,如果它们是单数,只是为了得到数组的大小,
然后使用malloc(),
然后再次检查所有数字以填充数组.
有没有可能让这个运行更快,而不是两次做同样的事情?

for (int i = a; i <= b; i++)
{
  if (check_if_prime(i) == 0)
    size++;
}
primze_numbers = malloc(size*sizeof(int));
int j = 0;
for (int i = a; i <= b; i++)
{
  if(check_if_prime(i) == 0)
  {
    prime_numbers[j] = i;
    j++;
  }
}

最佳答案 由于大小在开始时是未知的,因此为一个或多个元素的大小分配空间是低效的.

一种可能的解决方案是:每当大小不足时,重新分配空间(使用realloc)两倍于先前大小的大小.

Real size - Space size
    0            0
    1            1
    2            2
    3            4
    4            4
    5            8
    6            8
    7            8
    8            8
    9            16
    10           16
    ...          ...

这样,重新分配的次数不多,而且你不会浪费太多空间.

点赞