2012-02-04 54 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