大小未知的动态数组

时间:2014-05-06 08:00:03

标签: c arrays memory-management malloc

我想在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++;
  }
}

2 个答案:

答案 0 :(得分:2)

由于大小在开头是未知的,因此为一个元素的大小分配空间是低效的。

一种可能的解决方案是:只要尺寸不够,就重新分配空间(使用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
    ...          ...

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

答案 1 :(得分:0)

如果你能够使用c ++ - 你可以使用std :: vector来解决你的问题。