C++ 将std::数组推送到std::堆栈
我在做一个问题,我需要创建一个n维坐标的堆栈。我将坐标实现为typeC++ 将std::数组推送到std::堆栈,c++,C++,我在做一个问题,我需要创建一个n维坐标的堆栈。我将坐标实现为typestd::array,其中n_dims是一个编译时常量 Q:将坐标推送到堆栈的最佳方式是什么 可能性: 将数组创建为变量,然后将其推送到堆栈中。这似乎是浪费。如果我使用移动语义,那么就不会那么糟糕了: std::array my_array={1,3}; my_stack.push(std::move(my_数组)); //或者我的堆栈。安放(…) 但仍然是不必要的复杂 使用std::stack::emplace。这似乎不起作
std::array
,其中n_dims
是一个编译时常量
Q:将坐标推送到堆栈的最佳方式是什么
可能性:
std::array my_array={1,3};
my_stack.push(std::move(my_数组));
//或者我的堆栈。安放(…)
但仍然是不必要的复杂
std::stack::emplace
。这似乎不起作用。我认为这是因为std::array
是一种聚合类型。(我想更好地理解这一点——我认为一个重要的结果是聚合类型只有default和copy构造函数。)#包括
#包括
int main()
{
std::stack st;
圣安普莱斯(1,3);//不起作用
st.emplace({1,3});//不起作用
st.emplace({1,3}});//不起作用
}
我该怎么办?您可以使用
#包括
#包括
#包括
int main()
{
std::stack st;
st.emplace(标准::实验::制作_阵列(1,3));
}
您可以使用
#包括
#包括
#包括
int main()
{
std::stack st;
st.emplace(标准::实验::制作_阵列(1,3));
}
方法1并非浪费。这可能会影响调试性能,但仅此而已。优化器应该能够优化这些微不足道的低效率。另外,在std::array
上使用std::move
是完全没有意义的。方法1不是浪费。这可能会影响调试性能,但仅此而已。优化器应该能够优化这些微不足道的低效率。另外,在std::array
上使用std::move
完全没有意义。
#include <experimental/array>
#include <array>
#include <stack>
int main()
{
std::stack<std::array<int, 2>> st;
st.emplace(std::experimental::make_array(1,3));
}