2017-08-27 111 views
-1

我想使用STL容器來保存數組,但我不知道如何將元素插入到它。我正在嘗試不同的方法,而不是它爲我工作。谷歌在這種情況下也很無奈。這裏是我想要做的事:C++ 11將元素插入到數組列表中

std::forward_list<int[5]> buffers; 
buffers.push_front(); // What should I pass to create uninitialized array 

即使這種方法並不適用

typedef int Buffer[5]; 
std::forward_list<Buffer> buffers; 
Buffer buff; 
buffers.push_front(buff); 

其工作原理是包裝陣列類的唯一途徑。然後,一切都很好,但是我想知道我應該如何在C++中正確地做到這一點

+0

你可以使用內建的數組包裝類'使用Buffer = :: std :: array ; :: std :: forward_list buffers; buffers.emplace_front();' – VTT

+0

@VTT,...只是好奇@你的評論,有沒有任何有效的原因,你爲什麼要預先排除具有全局作用域的'std'命名空間限定符? – WhiZTiM

+0

@WhiZTiM這是防止意外的名稱衝突。 – VTT

回答

4

你不能店純數組到STL容器

試試這個

using Buffer = std::vector<int[5]>; 
std::forward_list<Buffer> buffers; 
buffers.push_front(Buffer()); 

using Buffer = std::array<int, 5>; 
std::forward_list<Buffer> buffers; 
buffers.push_front(Buffer()); 

或通過指向陣列的指針

std::forward_list<int*> buffers; 
int *ptr = new int[5]{1,2,3,4,5}; 
buffers.push_front(ptr); 

for (int * it : buffers) 
    for (int i = 0; i < 5; i++) 
     std::cout << it[i] << std::endl; 
+0

如果我使用std :: vector或std :: array,它會在每個插入時執行兩次內存分配。我想使用靜態數組來減少堆上的操作。 –

+1

@noonespecial你不能將純數組存儲到STL中,但是你可以存儲指向它們的指針。 [這裏是例子](https://ideone.com/mXScXi)。但我應該警告你它非常容易出錯。 –