我正在编写一个包含同一个类的子对象的集合的类,并且希望使用标准提供的函数而不是像first()
,{{1这样的函数来迭代和索引它们}},next()
,previous()
,last()
等。
在c ++ 14中,我必须实现哪些函数才能在所有情况下使类可迭代/可索引?
功能:
getchild(x)
begin()
cbegin()
rbegin()
crbegin()
end()
cend()
rend()
可以想到,虽然可能不一定所有都需要实现。也可选择(为方便程序员):
crend()
size()
是否还有其他必须实现的函数,比如预递增/递减或后递增/递减和数组下标运算符,还是只有empty()
和begin()
及其变体?
答案 0 :(得分:5)
如果容器将begin()
和end()
实现为成员函数,并且函数的返回类型支持预增量运算符,则可以在大多数上下文中使用它。我能想到的重要事项是:
range-for
。您可以使用:
Container c;
for ( auto& item : c ) { ... }
与迭代器一起使用的函数。例如:
Container c;
Item item;
std::find(c.begin(), c.end(), item);
使迭代器成为std::iterator
的子类是确保它与所有标准算法兼容的最佳方法。 (谢谢@Adrian)。