2016-03-03 125 views
1

我不打算改變我的動態數組的大小。我想創建一個靜態數組(包含短褲)的動態數組的原因是,我可以在一個函數中返回該數組(而不是在該函數中定義該數組的大小之前)。Dynamic Array of Static Arrays的問題

我的第一個問題是,我該如何返回這樣一個數組?函數不讓你返回沒有類型的指針&我無法找出如何定義類型爲array的指針。

這使我想到我的第二個問題,那就是如何正確定義靜態數組的動態數組?我在網上搜索了這個,但沒有一個答案太有幫助。

這樣做的一種方法是聲明:short (*array)[size]但這樣做的問題是我不知道如何在這種情況下初始化數組,而size必須是文字。

我可以這樣做:

typedef short column[size]; 
column * row = NULL; 
row = malloc(rowMax * sizeof(column)); 
row[0][0] = 10; 

但同樣,size必須是文字;即使size是文字,我收到一個錯誤,指出類型「void *」的值不能分配給「column *」類型的實體。

如果您有任何人有不使用矢量的解決方案,將不勝感激;因爲矢量類比數組類大。

+4

使用'std :: vector' –

+0

_「,因爲矢量類比數組類大。」_你的示例中沒有_array class_。 –

+1

如果您使用的是C++ 11或更高版本,則可以對靜態數組使用['std :: array'](http://en.cppreference.com/w/cpp/container/array)。 –

回答

2

在C++ 11人能夠使用來自<array>std::array做:

constexpr std::size_t const cols = 42u; // static size 
using MyStaticArray = std::array<short, cols>; // static array type 
// Or in C++03 and earlier: typedef short MyStaticArray[42u]; 

std::size_t const rows = someValue; // dynamic size 
MyStaticArray * dynamicArray = new MyStaticArray[rows]; 
// Or better: std::vector<MyStaticArray> dynamicArray(rows); 

for (std::size_t row = 0u; row < rows; ++row) 
    for (std::size_t col = 0u; col < cols; ++col) 
    dynamicArray[row][col] = rows * cols; 

PS:也給upvotes以下雷米勒博他的意見有助於改善這一職務。

+5

如果你打算使用'std :: array'的麻煩,你可以使用'std :: vector'作爲動態數組:'std :: vector dynamicArray(rows);'Even如果你不使用C++ 11,你仍然可以使用'std :: vector',只需使用'typedef short MyStaticArray [cols]; typedef靜態數組; –

1

爲了節省時間起見,只需要創建靜態數組

std::vector<std::array<Type, n>> 

不知道爲什麼大小差異的問題,這是隻有幾KB的載體。另外,如果你打算在一個C++應用程序中編寫C代碼......你是一個不好的時間。