2014-02-13 87 views
3

我知道如何初始化向量1D這樣如何在C++中使用構造函數初始化2D矢量?

int myints[] = {16,2,77,29}; 
std::vector<int> fifth(myints, myints + sizeof(myints)/sizeof(int)); 

假設我有2D數據。

float yy[][2] = {{20.0, 20.0}, {80.0, 80.0}, {20.0, 80.0}, {80.0, 20.0}}; 

如何初始化2D矢量?

+0

請記住,矢量在內存中是連續的 –

+1

@ Jarod42您不應該在問題中編輯OP的代碼。 – herohuyongtao

+0

@herohuyongtao:'float yy = {{..}}'是無效的。而我的編輯不會使發佈的答案無效。 – Jarod42

回答

3

在C++ 11可以初始化矢量的矢量是這樣的:

auto yy = std::vector<std::vector<float>> 
{ 
    {20.0, 20.0}, 
    {80.0, 80.0}, 
    {20.0, 80.0}, 
    {80.0, 20.0} 
}; 
+0

需要了解更多信息的內容包括initializer_lists和C++ 11中的統一初始化。 – YoungJohn

+4

爲什麼不只是'std :: vector > yy {.....};'? – juanchopanza

+3

@juanchopanza AAA人羣再次襲擊...... –

6

在當前的C++(自2011年),可以在構造函數中初始化這種載體:

vector<vector<float>> yy 
{ 
    {20.0, 20.0}, 
    {80.0, 80.0}, 
    {20.0, 80.0}, 
    {80.0, 20.0} 
}; 

參見它活着: http://ideone.com/GJQ5IU

+0

使用代碼塊作爲編譯器。按照你的說法嘗試,但有錯誤。 [鏈接](https://www.dropbox.com/s/q2ik84axsvh13ut/Capture.JPG) – sefat

+1

@sefat:您需要C++ 11(gcc編譯器標誌中的「-std = C++ 11」)。 – Jarod42

+0

@ Jarod42:謝謝你。我已經爲C++ 11配置了代碼塊,現在它可以工作。 – sefat

0

如果您事先不知道這些值,您仍然可以使用初始值初始化2D向量。

vector< vector <int> > arr(10, vector <int> (10, 0)); 

上述代碼將初始化10X10的二維矢量,其索引值爲零(0)。