如何使用for-each循环扫描int数组对象?

时间:2016-03-07 09:00:19

标签: c++ arrays for-loop

如果我使用new创建一个新的int数组对象,如下所示:

int *array = new int[20];

并用一些整数填充数组,然后尝试使用for-each循环扫描该数组会给我一个错误:

for (int x : array)  // error

为什么会发生这种情况,我该如何解决?我尝试使用引用器和地址符号(*&),但我尝试的每个组合都失败了。

离。

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

2 个答案:

答案 0 :(得分:6)

array 不是一个数组,而是一个指针,它不能用于Range-based for loop,因为没有关于“数组”大小的信息,无法推断出“数组”的beginend

  

range_expression - 表示合适的任何表达式   sequence(开头和结束成员的数组或对象)   定义函数或自由函数,见下文)或a   支撑-INIT-列表。

你可以使它成为真正的数组,(或使用std::array而不是原始数组)

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

或手动编写循环:

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

答案 1 :(得分:2)

for (int x : array)

,要求begin(array)end(array)有效。这不适用于int*

它适用于int array[20]std::vectorstd::array<int, 20>