gpt4 book ai didi

c++ - 将 std::array 推送到 std::stack

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:33 25 4
gpt4 key购买 nike

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

Q: What is the best way to push a coordinate to the stack?

可能性:

  1. 将数组创建为变量,然后将其压入堆栈。这似乎很浪费。如果我使用移动语义,那就没那么糟糕了:
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
}

我该怎么办?

最佳答案

您可以使用 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));
}

关于c++ - 将 std::array 推送到 std::stack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56195834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com