2016-03-07 63 views
1

如果我創建使用new象下面這樣一個新的int數組對象:如何使用for-each循環掃描int數組對象?

int *array = new int[20]; 

,並填寫一些整數數組,然後試圖通過該數組與for-each循環會扔我的錯誤掃描:

for (int x : array) // error 

爲什麼會發生這種情況,我該如何解決?我試着玩弄參考符號和地址符號(*&),但我嘗試過的每個組合均失敗。

ex。

for (int &x : *array) // does not work either. 
+1

使用'std :: vector'或'std :: array'。 – Jarod42

+0

嗨Jarod42,盡我所願,我不能使用這些特定的類型進行我正在進行的練習。 – Manuel

+0

無論何時您發佈有錯誤的代碼,請發佈您收到的錯誤消息 - 有時這對於試圖回答您的問題的人來說是非常有用的。 –

回答

6

array數組,但一個指針,它不能被用於Range-based for loop,因爲沒有關於「陣列」的大小的信息,所述begin和「陣列」的end不能被推斷。

range_expression - any expression that represents a suitable sequence (either an array or an object for which begin and end member functions or free functions are defined, see below) or a braced-init-list.

你可能使真正的數組,(或使用std::array而不是原始數組)

int array[20]; 
for (int x : array) { processing with x... } 

或手動編寫循環:

for (int i = 0; i < 20; i++) { processing with array[i]... } 
2
for (int x : array)

,它要求begin(array)end(array)是有效的。這不適用於int*

它可以用於int array[20],std::vectorstd::array<int, 20>