首页 >后端开发 >C++ >如何使我的自定义类型与 C 中基于范围的 for 循环一起使用?

如何使我的自定义类型与 C 中基于范围的 for 循环一起使用?

DDD
DDD原创
2024-12-19 22:33:16809浏览

How Can I Make My Custom Types Work with Range-Based for Loops in C  ?

使自定义类型与基于范围的 for 循环兼容

要启用基于范围的 for 循环与自定义数据类型的使用,您有两个主要选项:

  • 提供 begin() 和end() 成员函数:
    在返回迭代器的自定义类型中实现成员函数 begin() 和 end()。
  • 创建免费的 begin() 和 end() 函数:
    在与自定义类型相同的命名空间中定义名为 begin() 和 end() 的自由函数,将您的类型作为参数并返回迭代器。

命名空间注意事项:

如果您的自定义类型驻留在命名空间(例如 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn