2015-10-16 109 views
-4

我走行n和列M的大小從用戶聲明和初始化具有未知大小2D陣列

我想使大小n×m個的二維陣列(矩陣),將其初始化和上做一些工作它

int main() 
{ 

int m,n; 
cin>>m>>n; 
const int grow=m; 
const int gcol=n; 
auto G = new double[grow][gcol](); //GIVES ERROR that grow and gcol must be const 

/*int** G = new int*[n]; 
for (int i = 0; i < n; ++i) 
    G[i] = new int[n];*/ 

}

回答

0

數組大小是類型的一部分,並且需要在編譯時是已知的。你在運行時得到它。改用矢量。

1

您可以始終使用y * gcol + x在一維數組中進行索引,以使其有效地作爲二維數組工作。因此,您可以使用動態內存,例如與std::vector<double>

1

//提示錯誤是成長和gcol必須是const

不,不。除非你的編譯器不好。再次閱讀錯誤。

它給出了gcol必須是常量表達式的錯誤。您不能擁有動態數組的動態數組。這在C++中是不可能的。您只能擁有動態數組,它們具有靜態大小,在編譯時已知。

因此,您不能在運行時確定兩個維度的二維數組。

你有2種選擇:

  • 使用指針,動態數組的動態數組。這是你在那裏,註釋。動態的向量數組也可以工作。
  • 使用一個連續包含行的平面一維數組。

在這兩種情況下,我建議使用一個類來管理內存。可能是std::vector