2016-05-12 60 views
2

我有以下代碼:嵌套初始化列表不構成嵌套數組作爲我期望

#include <iostream> 
#include <vector> 
#include <array> 

using namespace std; 

int main() 
{ 
    std::vector<std::array<std::array<double, 3>, 2>> arr = 
    { 
     { 
     {2, 1, 0}, 
     {1, 1, 0} 
     } 
    }; 

    cout << "Array size " << arr.size() << endl; 
} 

我期望這個返回尺寸1的載體,含有該2D陣列看起來像這樣:

[ 
    [[2, 1, 0], [1, 1, 0]] 
] 

然而它返回大小兩個的矢量,其中兩個陣列看起來像這樣:

[ 
    [[2, 1, 0], [0, 0, 0]], 
    [[1, 1, 0], [0, 0, 0]] 
] 

在我看來,它應該能夠構造兩個內部大小的3個數組,然後使用它來構造單個大小的2個數組,將其放入向量中。

我很困惑。任何幫助解釋爲什麼這不像我預期的那樣表現會很好。

在Visual Studio在線編譯器和Clang中進行了測試。

+0

我也非常不確定如何最好地提出問題,如果有人覺得他們有更多的技術方式來說話,請改變它! – sji

回答

1

std::arrayaggregate type,它沒有一個構造函數的initializer-list,所以你需要爲每個std::array兩個支架:

std::vector<std::array<std::array<double, 3>, 2>> arr = 
{ 
    {{ 
    {{2, 1, 0}}, 
    {{1, 1, 0}} 
    }} 
}; 

您可能使這種警告與以g -Wmissing-braces ++(鐺使此警告默認爲-Wall)。

+0

您能否詳細說明。這種方法很有意義,但我現在無法準確地瞭解發生了什麼事情以產生我得到的結果。看起來像我的原始代碼現在應該無法編譯給我! – sji

+0

@sji我會盡快更新我的答案並提供詳細信息,但我的想法是,在聚合初始化中缺少的字段填充爲0. – Holt

+0

花了一點時間閱讀我現在瞭解的鏈接頁面。謝謝 – sji