[英]allocating and populating a large array
我想分配和初始化一大堆無符號長整數。 該數組是一個簡單的1-D數組,我想用前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
函數返回需要分配給已知[idx]的適當值。
您還可以使用指針/數組等效,並使用數組語法編寫代碼:
for(size_t idx = 0; idx < N; ++idx)
{
known[idx] = retrieve_value(idx);
}
也就是說,除非有充分的理由以這種方式新建數組,否則我強烈建議在這種情況下使用標准容器之一,如std :: vector或std :: array,因為它可以避免內存管理問題這些天大多是不必要的。 如果在編譯時已知N,則std::array
可能具有較少的開銷,否則使用帶有適當reserve()調用的std::vector
應該可以正常工作。 如果你必須從可用內存中擠出最后一個字節,我真的只建議處理原始內存。
我建議你創建一個數組初始化類,它將接受一個指向數組的指針和要創建的元素數。 使用此類的全局變量。 創建后,構造函數將填充數組。
class ArrayInitializer{
ArrayInitializer(unsigned long* ptr, size_t Size);
...
...
};
現在創建一個全局變量
//include your header here,
ArrayInitializer g_arrayInit(known,N);
程序執行開始后立即創建全局變量。 你也可以用這個類來清理使用'new'分配的內存
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.