繁体   English   中英

在C ++中创建一个动态大小的固定大小的int数组

[英]Creating a dynamic sized array of fixed sized int arrays in C++

出于某种原因,这给我带来了比我想象的更多麻烦......

int *myArray[3];

myArray = new int[mySize];

不起作用......

我之前以类似的方式使用过typedef并且它工作得很好,但这次我不想创建typedef

int (*myArray)[3] = new int[mySize][3];

有人可能会这样做:

::std::vector<int[3]> myArray;

因为vector非常适合动态大小的数组。 不幸的是,虽然该声明有效,但结果vector无法使用。

如果你有::std::array (一个C ++ 11特性)并且它实际上可以工作,这将同样有效:

::std::vector< ::std::array<int, 3> > myArray;

如果你能做到这一点,我强烈推荐它。 vector要比使用new分配自己的数组更好,更安全。

否则,试试这个:

typedef int inner_array_t[3];
inner_array_t *myArray = new inner_array_t[mySize];

因为你不想出于某种奇怪的原因使用typedef,你可以像这样解开它:

int (*myArray)[3] = new int[mySize][3];
int *myArray[3];

这意味着“ myArray应该是一个由三个指向int的数组”。

你可能想要“ myArray应该是一个指针 - (三个整数的数组)”。 拼写为int (*myArray)[3]

使用typedef这种事情要容易得多。

typedef int datum[3];
datum* myArray = new datum[mySize]; // no fuss, no muss.

但严重的是,只需使用std::vector 并为您的三个整数组创建一个实际的结构。 或者,如果它真的应该像数组一样,请使用boost::array这样您至少可以获得第一类类型的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM