在C++ 11中,可以使用基于范围的for
,它充当其他语言的foreach
。它甚至适用于纯C数组:
int numbers[] = { 1, 2, 3, 4, 5 };
for (int& n : numbers) {
n *= 2;
}
它怎么知道什么时候停止?它仅适用于在与
for
相同作用域中声明的静态数组吗?您如何将for
与动态数组一起使用? 最佳答案
它适用于任何类型为数组的表达式。例如:
int (*arraypointer)[4] = new int[1][4]{{1, 2, 3, 4}};
for(int &n : *arraypointer)
n *= 2;
delete [] arraypointer;
有关更详细的说明,如果传递给
:
右侧的表达式的类型是数组类型,则循环从ptr
迭代到ptr + size
(ptr
指向数组的第一个元素,size
是数组的元素计数)。这与用户定义的类型相反,后者通过在传递类对象或(如果没有这样调用的成员)非成员函数时将
begin
和end
查找为成员来工作。这些函数将产生begin和end迭代器(分别指向最后一个元素和序列的开始之后)。This question清除了为什么存在这种差异的原因。