我必须实现哪些函数才能使类可迭代?

时间:2015-09-17 01:26:56

标签: c++ iterator c++14

我正在编写一个包含同一个类的子对象的集合的类,并且希望使用标准提供的函数而不是像first(),{{1这样的函数来迭代和索引它们}},next()previous()last()等。

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

功能:

  • getchild(x)
  • begin()
  • cbegin()
  • rbegin()
  • crbegin()
  • end()
  • cend()
  • rend()

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

  • crend()
  • size()

是否还有其他必须实现的函数,比如预递增/递减或后递增/递减和数组下标运算符,还是只有empty()begin()及其变体?

1 个答案:

答案 0 :(得分:5)

如果容器将begin()end()实现为成员函数,并且函数的返回类型支持预增量运算符,则可以在大多数上下文中使用它。我能想到的重要事项是:

  1. range-for。您可以使用:

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

    Container c;
    Item item;
    std::find(c.begin(), c.end(), item);
    
  3. 使迭代器成为std::iterator的子类是确保它与所有标准算法兼容的最佳方法。 (谢谢@Adrian)。