正在初始化函数内部的std::数组

Initializing std::array inside a function

本文关键字:std 数组 内部 初始化 函数      更新时间:2023-10-16

我想创建一个调整堆栈大小的函数。它将根据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为成员的类),并仔细选择该类的方法,永远不要调整向量的大小。

你也可以使用dyarray,但它已经被c++11(和c++14,如果我记得正确的话)拒绝了

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