2016-03-03 89 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代码......你是一个不好的时间。