我想分配和初始化一个非常大的无符号长整数数组。该数组是一个简单的一维数组,我想用前 N 个素数的值填充它。我已经有一个程序可以将它们吐出到 .cpp 文件中以供包含。我只是不确定初始化数组的语法。我知道
unsigned long int *known = new unsigned long int[N];
将在堆上创建数组,但我不确定如何初始化成员。
我想分配和初始化一个非常大的无符号长整数数组。该数组是一个简单的一维数组,我想用前 N 个素数的值填充它。我已经有一个程序可以将它们吐出到 .cpp 文件中以供包含。我只是不确定初始化数组的语法。我知道
unsigned long int *known = new unsigned long int[N];
将在堆上创建数组,但我不确定如何初始化成员。
您基本上只需遍历数组并为每个元素分配正确的值,如下所示:
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() 调用也应该可以很好地完成工作。如果您绝对必须从可用内存中挤出最后一个字节,我真的只建议处理原始内存。
我建议您创建一个数组初始化程序类,该类将接受指向数组的指针和要创建的元素数。使用此类的全局变量。创建后,构造函数将填充数组。
class ArrayInitializer{
ArrayInitializer(unsigned long* ptr, size_t Size);
...
...
};
现在创建一个全局变量
//include your header here,
ArrayInitializer g_arrayInit(known,N);
程序执行一开始就创建全局变量。你也可以用这个类来清理使用'new'分配的内存