2012-02-04 62 views
-1

我想在for循环内动态创建数组。我有类似波纹管的东西:动态数组C++

for (int i = 0; i < line; i++){ 

complex* in[i] = new complex[8]; 

} 

complex是用户定义的数据类型。有没有办法做到上述操作。我得到的错误。我想为多个数组创建几个指针(不能说出我需要多少个数组),其中每个指针都指向一个特定的数组。

在此先感谢。

+0

你为什么想要*指针*? – 2012-02-04 08:34:52

+0

为什么你不使用'std :: vector'或者更确切的说:'std :: vector > in'? – Vyktor 2012-02-04 08:35:35

+0

这看起来像[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你试图解决的*实际*问题是什么? – Johnsyweb 2012-04-25 06:30:55

回答

4

如果你的“内部”阵列各自所有8个元素,你可以使用这种方法进行complex单元阵列8种元素的动态调整大小的数组:

std::vector<std::array<complex, 8> > c(line); 
// new and delete are not needed here 

当然,你可以在这个替代std::vectorstd::array案例 - std::array可能无法使用,具体取决于您使用的库。

std::array当元素数不变时比std::vector更精确一些。因此,std::array可以使一吨优化std::vector不能。如何影响你的程序可能会或可能不会被衡量。

这样做的好处是库实现经过了充分的测试,可以隔离你并检测一些使用错误。

+0

我不允许使用std :: vector – newbie 2012-02-04 08:48:43

+2

@skeptic这些日子对于一个C++程序来说这个要求是不寻常的 - 为什么你不能使用'std :: vector'? (我建议你也将这个细节添加到你的问题!) – justin 2012-02-04 08:53:50

+1

@skeptic:然后你的代码不算作C++。 – Puppy 2012-02-04 09:09:06

0

构造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++向量/阵列(正如贾斯汀在另一个答案中所表明的那样)。

+0

'std :: vector'完全可以与C代码连接。 – fredoverflow 2012-02-04 09:54:09

+0

@Fred:你一定错过了OP注释,他特别说他不能使用std :: vector。此外,添加元素时,矢量可能会被重新分配(因此地址会发生变化)。更好地使用固定数组的std :: array。不过,您仍然失去堆栈分配的好处。 – nimrodm 2012-02-04 10:01:50

+0

'std :: array'只是C数组的一个薄包装。没有进行动态分配。 – fredoverflow 2012-02-04 10:11:47