我想分配和初始化一大堆无符号长整数。该数组是一个简单的1-D数组,我想用前N个素数的值填充它。我已经有一个程序将这些程序吐出到.cpp文件中以便包含。我只是不确定初始化数组的语法。我知道
unsigned long int *known = new unsigned long int[N];
将在堆上创建数组,但我不确定如何初始化成员。
答案 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'
分配的内存