Run*_*ble 23 c++ circular-list data-structures
我想使用循环列表.
没有实施我自己(像这个人一样)我的选择是什么?
具体来说,我想做的是迭代一个对象列表.当我的迭代器到达列表的末尾时,它应该自动返回到开头.(是的,我意识到这可能很危险.)
请参阅Vladimir对a的定义circular_iterator:"circular_iterator永远不会与CircularList :: end()相等,因此您始终可以取消引用此迭代器."
Naa*_*aff 30
没有标准的循环列表.
但是,Boost中有一个循环缓冲区,可能会有所帮助.
如果您不需要任何花哨的东西,您可以考虑使用a vector并使用索引访问元素.您可以mod使用向量大小的索引来实现与循环列表大致相同的操作.
Cap*_*ult 18
如果你想要一个看起来像迭代器的东西,你可以自己滚动,看起来像
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;}}
};
Run Code Online (Sandbox Code Playgroud)
(其他迭代器操作留给读者练习).
list<int>::iterator circularNext(list<int> &l, list<int>::iterator &it)
{
return std::next(it) == l.end() ? l.begin() : std::next(it);
}
Run Code Online (Sandbox Code Playgroud)