2016-03-28 54 views

回答

1
int n = 4; 
int matrix[n][n]; 

你的第一個例子是沒有C++標準符合的標準不支持可變長度數組。

int** p = new int *[n]; 

for (int i = 0; i < n; i++) 
    p[i] = new int [n]; 

對於你的第二個例子中,你應該更好地使用std::vector<int>代替和組織矩陣的行和列作爲載體部分:

int n = 4; 
std::vector<int> matrix(n*n); 

使用newdelete自己通常是沒有必要的在C++中,並且陷入缺陷和障礙,這在適當的標準庫容器和智能指針類中得到了照顧。

1

第一個聲明是非標準的:編譯時必須知道n爲了編譯代碼。一些編譯器提供可變長度的數組作爲擴展,但代碼仍然是非標準的。

當您需要C++中的矩陣時,標準方法是使用std::vector<std::vector<T>>來處理大小爲而非直到運行時才知道的情況。如果在編譯時已知大小,並且您更願意在自動區域中進行分配,請使用std::array<N,std::array<N,T>>而不是向量。

這兩種方法都可以讓您構建與數組陣列完全相同的對象,但不需要顯式管理其內存。