0

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

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

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

4

2 回答 2

2

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

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

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

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

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

也就是说,除非有充分的理由以这种方式新建数组,否则我强烈建议在这种情况下使用标准容器之一,如 std::vector 或 std::array ,因为它可以避免内存管理问题这些天大多是不必要的。如果 N 在编译时已知,std::array则开销可能会更少,否则使用std::vector适当的 reserve() 调用也应该可以很好地完成工作。如果您绝对必须从可用内存中挤出最后一个字节,我真的只建议处理原始内存。

于 2013-07-09T03:32:20.057 回答
0

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

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

现在创建一个全局变量

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

程序执行一开始就创建全局变量。你也可以用这个类来清理使用'new'分配的内存

于 2013-07-09T03:39:34.930 回答