簡體   English   中英

如何初始化未知大小的多維向量,C ++

[英]How initialize multi dimensional vectors of an unknown size, C++

在我的項目中,我需要通過std:vector創建可變多維矩陣,並且可變大小。 我在下面找到了正確的代碼,可以創建:

template<typename T, std::size_t N>
struct md_vector
{
    using type = std::vector<typename md_vector<T, N - 1>::type>;
};

 template<typename T>
 struct md_vector<T, 1>
 {
    using type = std::vector<T>;
 };

 Template<typename T, std::size_t N>
 using md_vector_t = typename md_vector<T, N>::type;


//using
//this create 3 dimensional vectors of int - std:vector<std:vector<std:vector<int>>>
 md_vector_t<int, 3> matrix;

但是現在我不知道怎么用這個矩陣? 我想將整個矩陣初始化為0 ....通過示例4維矩陣,每個向量7個整數.... 7 x 7 x 7 x 7整數? 初始化后如何分配值? matrix [0] [0] [0] [0] - 我不能,因為我不知道尺寸大小。

非常感謝您的一些建議......

處理這種瘋狂情況的最簡單方法是使用resize() 讓編譯器弄清楚如何初始化向量:

md_vector_t<int, 4> matrix;

matrix.resize(7);

這將調整第一個維度的大小。 現在,您需要調整第一維中每個單獨元素的大小,以構建第二維。

for (auto &a:matrix)
    a.resize(7);

在此之前,您將弄清楚如何讓范圍迭代為您工作。 像這樣的東西:

md_vector_t<int, 4> matrix;

matrix.resize(7);

for (auto &a:matrix)
{
    a.resize(7);
    for (auto &b:a)
    {
        b.resize(7);
        for (auto &c:b)
        {
             c.resize(7);
        }
    }
}

把它計算在我的手指上,我非常確定這會在這里初始化所有四個維度。

在C ++ 11之前,這將是痛苦的。

現在,我不確定你為什么說“matrix [0] [0] [0] [0] - 我不能,因為我不知道尺寸大小”。 因為這就是你如何偷看和戳戳這個傻瓜。

矩陣中的每個元素都將構造為0.如果要將值初始化為其他值,只需使用相同的嵌套范圍迭代方法來初始化值。

現在,就初始化任意維矩陣的模板而言,采用相同的方法並使用與現有模板相同的方法應該是微不足道的:一維向量的專門化,以及調用的默認模板resize() ,然后執行范圍迭代,以遞歸方式調用其容器中的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM