如果我使用new
创建一个新的int数组对象,如下所示:
int *array = new int[20];
并用一些整数填充数组,然后尝试使用for-each循环扫描该数组会给我一个错误:
for (int x : array) // error
为什么会发生这种情况,我该如何解决?我尝试使用引用器和地址符号(*
和&
),但我尝试的每个组合都失败了。
离。
for (int &x : *array) // does not work either.
答案 0 :(得分:6)
array
不是一个数组,而是一个指针,它不能用于Range-based for loop,因为没有关于“数组”大小的信息,无法推断出“数组”的begin
和end
。
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::vector
,std::array<int, 20>
。