2011-07-15 86 views
-2

可能重複:
How do I best handle dynamic multi-dimensional arrays in C/C++?在C動態地初始化多維數組++

我開發的應用程序。在那我需要動態地聲明多維數組。與動態數組大小和值我想屁股它。請幫助我解決這個問題。

高級謝謝

+2

使用[boost.multi_array](http://www.boost.org/doc/libs /1_47_0/libs/multi_array/doc/index.html)。 –

+1

顯示目前爲止您的代碼,以便我們看到您正在處理的內容。 –

回答

0

這取決於您希望如何「動態」。

一種方式來做到這一點是:

const size_t outerSize = 15; 
const size_t innerSize = 20; 

int* arr = new int[outerSize * innerSize]; 

// To access an item, multiply the row index by the "width", and add the column index 
arr[innerSize * 5 + 7] = 13; 

// When done with the array: 
delete[] arr; 

這種解決方案的問題是,你必須要非常小心,以確保您撥打delete[] array;,即使異常被拋出。

如果你不想擔心內存管理,你可以注意不要使鋸齒形陣列(或都還好用交錯數組),那麼你可以使用:

std::vector<std::vector<YourType> > 

你可以

const size_t outerSize = 15; 
const size_t innerSize = 20; 

std::vector<YourType> initalRow(innerSize); 
std::vector<std::vector<YourType> > multiDimArray(outerSize, initalRow); 

你也可以用默認的預先填充值初始化:

const size_t outerSize = 15; 
const size_t innerSize = 20; 

YourType initialValue; 
initialValue.ExampleValue = 7; 
std::vector<YourType> initalRow(innerSize, initialValue); 
std::vector<std::vector<YourType> > multiDimArray(outerSize, initalRow); 
與特定的大小這樣的初始化

就像任何多維數組,填充它是要在兩個循環的最簡單的方法:

const size_t outerSize = 15; 
const size_t innerSize = 20; 

std::vector<YourType> initalRow(innerSize); 
std::vector<std::vector<YourType> > multiDimArray(outerSize, initalRow); 

for(size_t i = 0; i < outerSize; ++i) 
{ 
    for(size_t j = 0; j < innerSize; ++j) 
    { 
    multiDimArray[i][j].ExampleValue = i * j; 
    } 
}