c++ - 我必须实现哪些功能才能使类可迭代?

标签 c++ iterator c++14

<分区>

我正在编写一个包含同一类子对象集合的类,我想使用标准提供的函数而不是像这样的函数来迭代和索引它们:first(), next(), previous(), last(), getchild(x)

在 c++14 中,我必须实现哪些函数才能使类在所有情况下都可迭代/可索引?

功能:

  • 开始()
  • cbegin()
  • rbegin()
  • crbegin()
  • end()
  • cend()
  • rend()
  • crend()

想到,虽然,可能不一定所有都需要实现。也可选择(为了程序员的方便):

  • 大小()
  • empty()

是否有任何其他我必须实现的功能,例如前置自增/自减或后置自增/自减和数组下标运算符,或者它真的只是 begin() end() 及其变体?

最佳答案

如果你的容器实现了begin()end()作为成员函数,并且函数的返回类型支持预自增运算符,你可以使用它在大多数情况下。我能想到的重要的是:

  1. 范围。您可以使用:

    Container c;
    for ( auto& item : c ) { ... }
    
  2. 使用迭代器的函数。示例:

    Container c;
    Item item;
    std::find(c.begin(), c.end(), item);
    

使迭代器成为 std::iterator 的子类是确保它与所有标准算法兼容的最佳方法。 (感谢@Adrian)。

关于c++ - 我必须实现哪些功能才能使类可迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32621230/

相关文章:

c++ - 带有自定义 makefile 的 C++14 的 Eclipse Luna 索引器

c++ - 静态 constexpr 成员存储

c++ - 无法通过套接字发送或接收数据

c++ - 从范围类型获取迭代器类型

java - 通用编写器/输出器。 Reader 之于 Iterator,Writer 之于 X?

c++ - 扫描线多边形填充算法

c++ - 访问动态数组中的结构中的字符串变量时如何修复 "segmentation fault (core dumped)"错误

c++ - _vimrc 中为 cmake 和 doxygen 提供的命令在 gvim 启动时出现错误?

c++ - std::min/max 类型推导在 linux 和 windows 上不同

c++ - 机器人路径规划 - A*(星级)