簡體   English   中英

分配和填充大型數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM