2
我想实现循环迭代器,这在我的问题中非常有用。根据this线程,我使用boost::iterator_adaptor
来达到这个目的,并且迭代器本身工作正常。实现与this answer非常相似。如何正确使用boost :: iterator_adaptor来制作循环迭代器?
但是,操作时有一些问题,既cycle_iterator
并在同一个句子“本土” IteratorBase
,像这样:
vector<int> v;
vector<int>::iterator it = v.begin();
cyclic_iterator<vector<int>::iterator> cit(v.begin(), v.end());
if (cit != it) // Don't compile
{
...
}
编译器生成错误C2678:二进制“=!”:没有操作员发现这需要类型'cyclic_iterator'的左侧操作数(或者没有可接受的转换)。
我可以在cyclic_iterator
的IteratorBase
中明确指定operator!=
来解决它。但是,我需要明确地重载operator==
,operator=
等等。
有没有一些更方便的方法来使这个东西工作?
它只能处理的情况下'它V cit',其中V是一些比较运算,而不是分配,甚至'CIT V it'情况。 – Mikhail 2012-03-11 20:28:48
好了,毕竟,我决定将这个转换运算符与赋值运算符一起添加,而不是将'cyclic_itertor'与原始迭代器进行比较,因为它可能容易出错。所以我会接受你的回答:) – Mikhail 2012-03-15 16:48:30
@Mikhail:谢谢:-) – 2012-03-17 11:26:18