2009-06-03 51 views
20

我想使用循環列表。C++中是否存在循環列表的標準實現?

執行我自己的問題(like this person did)我有什麼選擇?

具體而言,我想要做的是迭代對象列表。當我的迭代器到達列表的末尾時,它應該自動返回到開頭。 (是的,我意識到這可能是危險的。)

See Vladimir's definition of a circular_iterator:「circular_iterator永遠不會等於CircularList :: end(),因此您可以隨時取消引用此迭代器。」

回答

27

沒有標準的圓形列表。

但是,在Boost中有一個circular buffer,這可能會有所幫助。

如果你不需要任何東西,你可以考慮只使用vector並訪問帶索引的元素。您可以只使用mod您的索引與矢量大小達到與循環列表大致相同的效果。

+3

謝謝納夫!用矢量的大小修改索引是一個簡單的解決方案,我很尷尬,我沒有想到它。 – Runcible 2009-06-03 22:13:57

16

如果你想要的東西看起來像一個迭代器,你可以滾你自己的,看起來像

template <class baseIter> 
class circularIterator { 
    private: 
     baseIter cur; 
     baseIter begin; 
     baseIter end; 
    public: 
     circularIterator(baseIter b, baseIter e, baseIter c=b) 
      :cur(i), begin(b), end(e) {} 
     baseIter & operator ++(void) {++cur; if(cur == end) {cur = begin;}} 
}; 

(其它迭代器操作留下鍛鍊到閱讀器)。