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