我想使用循環列表。C++中是否存在循環列表的標準實現?
執行我自己的問題(like this person did)我有什麼選擇?
具體而言,我想要做的是迭代對象列表。當我的迭代器到達列表的末尾時,它應該自動返回到開頭。 (是的,我意識到這可能是危險的。)
See Vladimir's definition of a circular_iterator
:「circular_iterator永遠不會等於CircularList :: end(),因此您可以隨時取消引用此迭代器。」
我想使用循環列表。C++中是否存在循環列表的標準實現?
執行我自己的問題(like this person did)我有什麼選擇?
具體而言,我想要做的是迭代對象列表。當我的迭代器到達列表的末尾時,它應該自動返回到開頭。 (是的,我意識到這可能是危險的。)
See Vladimir's definition of a circular_iterator
:「circular_iterator永遠不會等於CircularList :: end(),因此您可以隨時取消引用此迭代器。」
沒有標準的圓形列表。
但是,在Boost中有一個circular buffer,這可能會有所幫助。
如果你不需要任何東西,你可以考慮只使用vector
並訪問帶索引的元素。您可以只使用mod
您的索引與矢量大小達到與循環列表大致相同的效果。
如果你想要的東西看起來像一個迭代器,你可以滾你自己的,看起來像
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;}}
};
(其它迭代器操作留下鍛鍊到閱讀器)。
謝謝納夫!用矢量的大小修改索引是一個簡單的解決方案,我很尷尬,我沒有想到它。 – Runcible 2009-06-03 22:13:57