静态数组动态数组的问题

时间:2016-03-03 23:48:56

标签: c++ arrays

我不打算改变动态数组的大小。我想创建静态数组的动态数组(包含short)的原因是我可以在函数中返回该数组(直到我在该函数中才定义该数组的大小)。

我的第一个问题是,如何返回这样的数组?函数不允许您返回没有类型&我无法找到如何定义类型为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 *”类型的实体。

如果你们中的任何人有一个不使用矢量的解决方案,那将非常感激;因为向量类大于数组类。

2 个答案:

答案 0 :(得分:2)

在C ++ 11中,可以使用std::array中的<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:同时放弃Remy Lebeau的评价,因为他的评论有助于改进这篇文章。

答案 1 :(得分:1)

为了节省时间,只需创建一个静态数组向量

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

不确定为什么尺寸差异很重要,只有几Kb。

另外,如果你要在C ++应用程序中编写C代码......那你就是时候了。

相关问题