在C ++ 11中,您可以使用基于范围的for,它foreach与其他语言一样。它甚至适用于纯C数组:
int numbers[] = { 1, 2, 3, 4, 5 }; for (int& n : numbers) { n *= 2; } 它怎么知道什么时候停止?它仅适用于在与使用的作用域相同的范围内声明的静态数组for吗?您如何for在动态数组中使用它? 问题来源于stack overflow
它适用于任何类型为数组的表达式。例如:
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迭代器(分别直接指向最后一个元素和序列的开始之后)。
这个问题弄清楚了为什么存在这种差异。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。