simple - ¿Existe una implementación estándar de una lista circular para C++?
listas circulares usos (3)
No hay una lista circular estándar.
Sin embargo, hay un buffer circular en Boost, que podría ser útil.
Si no necesita algo sofisticado, puede considerar usar un vector
y acceder a los elementos con un índice. Simplemente puede mod
su índice con el tamaño del vector para lograr casi lo mismo que una lista circular.
Quiero usar una lista circular
A falta de implementar la mía ( como esta persona lo hizo ) ¿cuáles son mis opciones?
Específicamente, lo que quiero hacer es iterar sobre una lista de objetos. Cuando mi iterador llegue al final de la lista, debería regresar automáticamente al principio. (Sí, me doy cuenta de que esto podría ser peligroso).
Consulte la definición de Vladimir de un circular_iterator
: "un circular_iterator nunca será igual con CircularList :: end (), por lo tanto, siempre puede eliminar la referencia de este iterador".
Si quieres algo que se parezca a un iterador, puedes enrollar el tuyo, luciendo algo así como
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;}}
};
(Otras operaciones de iterador se dejan como ejercicio al lector).
list<int>::iterator circularNext(list<int> &l, list<int>::iterator &it)
{
return std::next(it) == l.end() ? l.begin() : std::next(it);
}