繁体   English   中英

有没有办法声明一个特定大小的 std::vector 数组?

[英]Is there a way to declare an array of std::vector of a certain size?

我想声明一个一定长度的向量数组。 为了声明一个向量数组,我写了这个,例如:

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

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

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

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

这将创建一个为 14 个元素分配空间的std::vector

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

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

我收到此错误:

错误:数组必须用大括号括起来的初始化程序初始化 [-fpermissive]
std::vector<double> myarray[17][38]42;

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

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

我收到此错误:

错误:预期的 ',' 或 ';' 在'['标记之前
std::vector<double> myotherarray(14)[17][38][42];

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

你有一个向量数组(array of array of),所以如果你想初始化它,你必须使用大括号初始化列表,并且你必须显式地初始化每个向量元素(实际上是 38* 42 * 14 个向量)。 这似乎不可行。

如果您只想初始化数组中的第一个向量(数组的 arrays)(或很少的向量),您可以这样做:

std::vector<double> vec[17][38][42]{{{std::vector<double>(14)}}};

但从实际的角度来看,您必须在循环中迭代那些向量的 arrays 并resize它们的大小。

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

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);
        }
    }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM