我想创建一个调整堆栈大小的函数。它将根据 max 的值创建一个大小更大或更小的新数组,然后将元素复制到该新数组中。
void resize(const int& max) {
std::array<Item, max> temp;
for (int i = 0; i < n; i++) {
temp.at(i) = a.at(i);
}
a = temp;
}
我知道这不会运行,因为 max 不是常量表达式。我绝对不知道如何传递一个常量 int 值。我试过:
void resize(constexpr int& max)//编译器说不能使 int arg constexpr
我不想做 constexpr void resize 因为我不需要在编译时计算函数,而且它无论如何也不起作用。
注意:我知道如果我使用 std::vector 这可能会更容易,因为它可以调整大小,但我想尝试使用 std::array。
我该怎么办?
最佳答案
我认为您误会了编译时常量和运行时常量。您不能以这种方式使用 std::array
。您需要一个容器,其大小不是编译时常量,即 std::vector
。
如果您希望容器的大小在整个运行时保持不变,您可以依靠自律(即:不要使用 push_back()
或 resize()
等等。)或者你可以写一个包装类(即一个有一个 std::vector
作为成员的类)并仔细选择这个类的方法,不要调整 vector 的大小。
您也可以使用 dynarray,但它已被 c++11(和 c++14,如果我没记错的话)拒绝
PS:将您的方法命名为 resize()
然后说您想要常量大小的数组是很奇怪的 =)
您确实意识到,如果调用此方法,您确实会在运行时更改数组的大小,在这种情况下,为什么不使用 std::vector 并完成它呢?
关于c++ - 在函数内初始化 std::array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775561/