簡體   English   中英

將 std::array 更改為 std::vector

[英]changing std::array to std::vector

我有一些使用 std::array 的代碼。 這是使用堆棧分配 memory。 但我需要創建一個大約 2MB 的數組。 所以做一些搜索似乎我可以使用使用堆的 std::vector 。

我修改了我的代碼來做到這一點

//alignas(128) std::array<uint32_t, array_size> write_data;
//alignas(128) std::array<uint32_t, array_size> read_data = { { 0 } };

alignas(128) std::vector<uint32_t> write_data[array_size];
alignas(128) std::vector<uint32_t> read_data[array_size];

但我現在在代碼的其他部分遇到錯誤。 這使用了一些線程

  std::thread read_thread(read, std::ref(dev),
            (void*)read_data.data(), read_data.size() * sizeof(uint32_t), dma_block_size*32);
  std::thread write_thread(write, std::ref(dev),
            (void*)write_data.data(), write_data.size() * sizeof(uint32_t), num_dma_blocks);

E0289 沒有構造函數“std::thread::thread”的實例與參數列表匹配
E0153 表達式必須有 class 類型

問題出在上面代碼中的 read/write 和 read_data/write_data 上。 有人可以告訴我問題是什么,因為我不是真正的 cpp 程序員。 謝謝

您可以使用如下構造函數初始化具有特定大小的向量:

std::vector<int> vec(10);

通過使用std::vector<int> vec[10]; 你聲明了 10 個向量的數組。 每個向量都是空的。

順便說一句:如果你使用std::vector<int> vec{10}; 您聲明一個具有等於 10 的單個int的向量。

似乎如果我將向量初始化更改為以下,那么它就可以工作

alignas(128) std::vector<uint32_t> write_data (array_size);
alignas(128) std::vector<uint32_t> read_data (array_size);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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