簡體   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