分配和填充大型数组

时间:2013-07-09 03:27:36

标签: c++ arrays heap

我想分配和初始化一大堆无符号长整数。该数组是一个简单的1-D数组,我想用前N个素数的值填充它。我已经有一个程序将这些程序吐出到.cpp文件中以便包含。我只是不确定初始化数组的语法。我知道

unsigned long int *known = new unsigned long int[N];

将在堆上创建数组,但我不确定如何初始化成员。

2 个答案:

答案 0 :(得分:2)

你基本上只是遍历数组并为每个元素分配正确的值,如下所示:

for(size_t idx = 0; idx < N; ++idx)
{
  *(known + idx) = retrieve_value(idx);
}

显然,retrieve_value函数返回需要分配给已知[idx]的适当值。

您还可以使用指针/数组等效,并使用数组语法编写代码:

for(size_t idx = 0; idx < N; ++idx)
{
  known[idx] = retrieve_value(idx);
}

那就是说,除非有一个很好的理由以这种方式新建数组,我强烈建议在这种情况下使用标准容器之一,如std :: vector或std :: array,因为它将避免内存如今,管理上的头痛大多是不必要的。如果在编译时已知N,则std::array可能具有较少的开销,否则使用具有适当reserve()调用的std::vector也应该可以正常工作。如果你绝对不得不从可用内存中挤出最后一个字节,我真的只建议处理原始内存。

答案 1 :(得分:0)

我建议你创建一个数组初始化类,它接受一个指向数组的指针和要创建的元素数。使用此类的全局变量。 创建后,构造函数将填充数组。

    class ArrayInitializer{
       ArrayInitializer(unsigned long* ptr, size_t Size);
       ...
       ...
    };

现在创建一个全局变量

    //include your header here,
    ArrayInitializer g_arrayInit(known,N);

程序执行开始后立即创建全局变量。你也可以用这个类来清理使用'new'

分配的内存