在函数内初始化std :: array

时间:2014-11-06 09:13:24

标签: c++ arrays c++11

我想创建一个调整堆栈大小的函数。它将根据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。

我该怎么办?

1 个答案:

答案 0 :(得分:4)

我认为你误解了编译时常量和运行时常量。您不能以这种方式使用std::array。你想要一个大小不是编译时常量的容器,那就是std::vector

如果您希望容器的大小在整个运行时间保持不变,您可以依靠自律(即:不要使用push_back()resize()等。)或者你可以编写一个包装类(.ie一个具有std::vector作为成员的类)并仔细选择该类的方法,从不调整向量的大小。

您也可以使用dynarray,但它已被c ++ 11拒绝(和c ++ 14,如果我没记错的话)

PS:命名你的方法resize(),然后说你想要恒定大小的数组=)是很奇怪的 你确实意识到,如果你调用这个方法,你确实在运行时改变了数组的大小,在这种情况下,为什么不使用std :: vector并完成它呢?