我想声明一个特定长度的 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/