使自定义类型与基于范围的 for 循环兼容
要启用基于范围的 for 循环与自定义数据类型的使用,您有两个主要选项:
命名空间注意事项:
如果您的自定义类型驻留在命名空间(例如 xml)中,则必须声明 begin() 和 end()也在该命名空间内运行。不需要指定 xml::begin() 或 std::begin()。
方法要求:
begin/end 返回值不是需要是实际的迭代器。但是,它们必须遵守特定要求:
基于范围的 for 循环扩展:
基于范围的 for 循环语法 for (range_declaration : range_expression) 扩展为以下伪代码:
{ auto &range = range_expression; for (auto begin = begin_expr, end = end_expr; begin != end; ++begin) { range_declaration = *begin; loop_statement } }
C 17 解耦结束类型:
在 C 17 中,基于范围的 for 循环扩展伪代码更改为:
{ auto &range = range_expression; auto begin = begin_expr; auto end = end_expr; for (; begin != end; ++begin) { range_declaration = *begin; loop_statement } }
此更改允许结束迭代器类型与开始迭代器类型不同。它允许使用仅支持与开始迭代器类型进行不等式比较的“哨兵”迭代器。
以上是如何使我的自定义类型与 C 中基于范围的 for 循环一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!