2017-08-27 114 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)。但我应该警告你它非常容易出错。 –