在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是数组的元素计数)。

这与用户定义的类型相反,后者通过在传递类对象或(如果没有这样调用的成员)非成员函数时将beginend查找为成员来工作。这些函数将产生begin和end迭代器(分别指向最后一个元素和序列的开始之后)。

This question清除了为什么存在这种差异的原因。

09-28 11:06
查看更多