我想创建一个调整堆栈大小的函数。它将根据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&amp; max)//编译器说无法生成int arg constexpr
我不想做constexpr void resize,因为我不需要在编译时对函数进行评估,但它无论如何都没有用。
注意:我知道如果我使用std :: vector可能会更容易,因为它可以调整大小,但我想尝试使用std :: array。
我该怎么办?
答案 0 :(得分:4)
我认为你误解了编译时常量和运行时常量。您不能以这种方式使用std::array
。你想要一个大小不是编译时常量的容器,那就是std::vector
。
如果您希望容器的大小在整个运行时间保持不变,您可以依靠自律(即:不要使用push_back()
或resize()
等。)或者你可以编写一个包装类(.ie一个具有std::vector
作为成员的类)并仔细选择该类的方法,从不调整向量的大小。
您也可以使用dynarray,但它已被c ++ 11拒绝(和c ++ 14,如果我没记错的话)
PS:命名你的方法resize()
,然后说你想要恒定大小的数组=)是很奇怪的
你确实意识到,如果你调用这个方法,你确实在运行时改变了数组的大小,在这种情况下,为什么不使用std :: vector并完成它呢?