c++ - 在函数内初始化 std::array

标签 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& 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/

相关文章:

c++ - SFINAE 不适用于 Visual Studio 2010 for std::is_pointer

c++ - 使用 chrono::time_point 获取当前小时数和分钟数

c# - c++ exe如何定位c# dll?

ruby-on-rails - 在数组中使用 'order' 的替代方法

c++ - 从外部源向 Windows 调试器发送调试事件

arrays - 如何在golang中递增数组或 slice 中的所有元素

php - MySQL 数组与 PHP

c++ - 英特尔 TBB 中的任务延续

c++ - 释放内存opencv

c++ - SetCheck 用于多个按钮或使用转换字符串来定义