Gibt es eine Standardimplementierung einer Circular List für C++?

Gibt es eine Standardimplementierung einer Circular List für C++?

Es gibt keine standardmäßige Ringliste.

Es gibt jedoch einen Ringpuffer in Boost, der hilfreich sein könnte.

Wenn Sie nichts Besonderes brauchen, können Sie einfach einen vector verwenden und Zugreifen auf die Elemente mit einem Index. Sie können einfach mod Ihr Index mit der Größe des Vektors, um ungefähr dasselbe zu erreichen wie eine kreisförmige Liste.


Wenn Sie möchten, dass etwas wie ein Iterator aussieht, können Sie Ihren eigenen rollen, der in etwa so aussieht

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;}}
};

(Andere Iterator-Operationen werden dem Leser als Übung überlassen).


list<int>::iterator circularNext(list<int> &l, list<int>::iterator &it)
{
    return std::next(it) == l.end() ? l.begin() : std::next(it);
}