2012-02-10 150 views
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_iteratorIteratorBase中明確指定operator!=來解決它。但是,我需要明確地重載operator==operator=等等。

有沒有一些更方便的方法來使這個東西工作?

回答

1

您是否嘗試過做這樣的事情:

template<class IteratorBase> 
class cycle_iterator : public // (...) 
{ 
    // (...) 
    operator IteratorBase() { 
     return base_reference(); 
    } 
}; 
+0

它只能處理的情況下'它V cit',其中V是一些比較運算,而不是分配,甚至'CIT V it'情況。 – Mikhail 2012-03-11 20:28:48

+0

好了,畢竟,我決定將這個轉換運算符與賦值運算符一起添加,而不是將'cyclic_itertor'與原始迭代器進行比較,因爲它可能容易出錯。所以我會接受你的回答:) – Mikhail 2012-03-15 16:48:30

+0

@Mikhail:謝謝:-) – 2012-03-17 11:26:18