将std :: array推送到std :: stack

时间:2019-05-18 03:56:08

标签: c++

我正在做一个需要创建n维坐标堆栈的问题。我已经将坐标实现为std::array<std::size_t, n_dims>类型,其中n_dims是编译时常量。

  

:将坐标推入堆栈的最佳方法是什么?

可能性:

  1. 将数组创建为变量,然后将其推入堆栈。这似乎很浪费。如果我使用move语义,会减少一些麻烦:
std::array<std::size_t, 2> my_array = {1, 3};
my_stack.push(std::move(my_array));
// or my_stack.emplace(...)

但仍然不必要地复杂。

  1. 使用std::stack::emplace。这似乎不起作用。我认为这是因为std::array是聚合类型。 (我想更好地理解这一点-我相信一个重要的结果是聚合类型仅具有默认构造函数和复制构造函数。)
#include <array>
#include <stack>

int main() 
{
    std::stack<std::array<int, 2>> st;
    st.emplace(1,3);      // doesn't work
    st.emplace({1,3});    // doesn't work
    st.emplace({{1,3}});  // doesn't work
}

我该怎么办?

1 个答案:

答案 0 :(得分:0)

您可以使用std::experimental::make_array

#include <experimental/array>
#include <array>
#include <stack>

int main() 
{
    std::stack<std::array<int, 2>> st;
    st.emplace(std::experimental::make_array(1,3));
}