我正在做一个需要创建n维坐标堆栈的问题。我已经将坐标实现为std::array<std::size_t, n_dims>
类型,其中n_dims
是编译时常量。
问:将坐标推入堆栈的最佳方法是什么?
可能性:
std::array<std::size_t, 2> my_array = {1, 3};
my_stack.push(std::move(my_array));
// or my_stack.emplace(...)
但仍然不必要地复杂。
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
}
我该怎么办?
答案 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));
}