c++ - 有没有办法声明一定大小的 std::vector 数组?

标签 c++ arrays vector initialization size

我想声明一个特定长度的 vector 数组。例如,要声明一个 vector 数组,我会这样写:

std::vector<double> myarray[17][38][42];

这将创建一个 3 维 17x38x24 数组,其中每个元素的类型为 std::vector<double> .

我还知道要指定 std::vector 的大小例如,我可以写:

std::vector<double> myvector(14);

这会创建一个std::vector为 14 个元素分配了空间。

当我尝试结合这两个过程时遇到了问题。例如,写:

std::vector<double> myarray[17][38][42](14);

我收到此错误:

error: array must be initialized with a brace-enclosed initializer [-fpermissive]
std::vector<double> myarray[17][38]42;

当我尝试以这种方式初始化它时:

std::vector<double> myotherarray(14)[17][38][42];

我收到此错误:

error: expected ‘,’ or ‘;’ before ‘[’ token
std::vector<double> myotherarray(14)[17][38][42];

将数组的每个元素声明为 std::vector 的正确方法是什么?一定大小?

最佳答案

您无法按照您想要的方式初始化这样的多维数组。但您可以先声明它,然后使用单独的初始化循环,例如:

std::vector<double> myarray[17][38][42];
for(size_t i = 0; i < 17; ++i) {
    for(size_t j = 0; j < 38; ++j) {
        for(size_t k = 0; k < 42; ++k) {
            myarray[i][j][k].resize(14);
        }
    }
}

或者:

std::vector<double> myarray[17][38][42];
for(auto &d1 : myarray) {
    for(auto &d2 : d1) {
        for(auto &elem : d2) {
            elem.resize(14);
        }
    }
}

但是,如果您在编译时已经知道 vector 大小,为什么还要使用 std::vector 呢?您可以使用 std::array 代替,例如:

std::array<double, 14> myarray[17][38][42];

关于c++ - 有没有办法声明一定大小的 std::vector 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62922783/

相关文章:

c++ - setbuf() 会影响 cout 吗?

c++ - 关闭函数时返回 vs break?

c++ - 列出所有正在运行的应用程序 MASM32 程序集

c++ - 如何在 C++ 中的两个 vector 之间 move 项目

c++ - 64 位机器上的 STL vector 大小

c++ - 继承和虚函数无法编译(来自 Head First DP)

c - 初学者查询 : unable to reverse char array in C

javascript - 在 JavaScript 中创建 deepEqual 函数

Java:从计算的角度来看,如果将一个数组设置为对另一个数组的引用会怎样?

c++ - 仅将结构的 std::vector 成员传递给函数 (C++)