有一个基于范围的 for 循环,语法如下:
for(auto& i : array)
它适用于常量数组,但不适用于基于指针的动态数组,例如
int *array = new int[size];
for(auto& i : array)
cout<< i << endl;
它给出了关于替换失败的错误和警告,例如:
错误] C:\Users\Siegfred\Documents\C-Free\Temp\Untitled2.cpp:16:16: 错误:没有匹配的函数调用 ‘begin(int*&)’
如何将这种新语法与动态数组一起使用?
原文由 Maurice Rodriguez 发布,翻译遵循 CC BY-SA 4.0 许可协议
要使用 _基于范围的 for 循环_,您必须提供
begin()
和end()
成员函数或重载非成员begin()
和end()
功能。在后一种情况下,您可以将您的范围包装在std::pair
和重载begin()
和end()
中:现在您可以像这样使用 for 循环:
Note, that the non-member
begin()
andend()
functions have to be overloaded in thestd
namespace here, becausepair
also resides in命名空间std
。如果您不想篡改标准命名空间,您可以简单地创建自己的小对类并在命名空间中重载begin()
和end()
。或者,围绕动态分配的数组创建一个瘦包装器,并提供
begin()
和end()
成员函数:您的呼叫站点如下所示:
例子