循環リストを使いたい。
私自身の実装を除いて (この人がしたように) 私のオプションは何ですか?
具体的に私がやりたいことは、オブジェクトのリストを反復処理することです。イテレータがリストの最後に到達すると、自動的に最初に戻るはずです。(はい、これが危険な場合があることは理解しています。)
循環リストを使いたい。
私自身の実装を除いて (この人がしたように) 私のオプションは何ですか?
具体的に私がやりたいことは、オブジェクトのリストを反復処理することです。イテレータがリストの最後に到達すると、自動的に最初に戻るはずです。(はい、これが危険な場合があることは理解しています。)
標準的な循環リストはありません。
ただし、Boost には循環バッファーがあり、役立つ場合があります。
派手なものが必要ない場合は、 a を使用し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;}}
};
(他のイテレータ操作は読者への演習として残されています)。