我想在for循环内动态创建数组。我有类似波纹管的东西:动态数组C++
for (int i = 0; i < line; i++){
complex* in[i] = new complex[8];
}
complex是用户定义的数据类型。有没有办法做到上述操作。我得到的错误。我想为多个数组创建几个指针(不能说出我需要多少个数组),其中每个指针都指向一个特定的数组。
在此先感谢。
我想在for循环内动态创建数组。我有类似波纹管的东西:动态数组C++
for (int i = 0; i < line; i++){
complex* in[i] = new complex[8];
}
complex是用户定义的数据类型。有没有办法做到上述操作。我得到的错误。我想为多个数组创建几个指针(不能说出我需要多少个数组),其中每个指针都指向一个特定的数组。
在此先感谢。
如果你的“内部”阵列各自所有8个元素,你可以使用这种方法进行complex
单元阵列8种元素的动态调整大小的数组:
std::vector<std::array<complex, 8> > c(line);
// new and delete are not needed here
当然,你可以在这个替代std::vector
为std::array
案例 - std::array
可能无法使用,具体取决于您使用的库。
std::array
当元素数不变时比std::vector
更精确一些。因此,std::array
可以使一吨优化std::vector
不能。如何影响你的程序可能会或可能不会被衡量。
这样做的好处是库实现经过了充分的测试,可以隔离你并检测一些使用错误。
构造complex *in[i] = ...
没有意义。您不能一个接一个地声明数组的元素。您必须在之前声明整个阵列。
也就是说,像下面
complex *in[MAX_LINES];
// or you can allocate in[] dynamically:
// complex *in[] = new (complex*)[line];
for (int i = 0; i < line; i++){
in[i] = new complex[8];
}
当然,除非特别需要C风格的阵列(例如 - 与C代码接口),它可能是更好地使用C++向量/阵列(正如贾斯汀在另一个答案中所表明的那样)。
'std :: vector'完全可以与C代码连接。 – fredoverflow 2012-02-04 09:54:09
@Fred:你一定错过了OP注释,他特别说他不能使用std :: vector。此外,添加元素时,矢量可能会被重新分配(因此地址会发生变化)。更好地使用固定数组的std :: array。不过,您仍然失去堆栈分配的好处。 – nimrodm 2012-02-04 10:01:50
'std :: array'只是C数组的一个薄包装。没有进行动态分配。 – fredoverflow 2012-02-04 10:11:47
你为什么想要*指针*? – 2012-02-04 08:34:52
为什么你不使用'std :: vector'或者更确切的说:'std :: vector> in'? –
Vyktor
2012-02-04 08:35:35
这看起来像[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你试图解决的*实际*问题是什么? – Johnsyweb 2012-04-25 06:30:55