[英]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.