Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将std::数组推送到std::堆栈_C++ - Fatal编程技术网

C++ 将std::数组推送到std::堆栈

C++ 将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。这似乎不起作

我在做一个问题,我需要创建一个n维坐标的堆栈。我将坐标实现为type
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));
    }