我想在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