C -未知大小的动态数组



我想用C语言写一个程序,其中用户输入两个数字a和b。

0 & lt;& lt;INT_MAX

& lt;b & lt;INT_MAX

程序检查a和b之间有多少素数,并将它们全部保存在一个动态数组中。

对于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
    ...          ...

这样,重新分配的次数就很少,也不会浪费太多的空间。

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

相关内容

  • 没有找到相关文章

最新更新