que programacion para listas libreria iteradores iterador contenedoras clases c++ generics iteration containers

programacion - libreria para listas c++



Iterador genérico (3)

Aquí hay algunos artículos que pueden interesarle

Otorgando a los iteradores de STL una clase base

Tipo de borrado para los Iteradores de C ++

any_iterator Class Reference

Estoy tratando de encontrar una forma genérica de acceder a un conjunto de contenedores. Tengo un vector estándar y una lista además de otra lista personalizada.

La lista personalizada define un iterador;

class Iterator: public std::iterator<std::forward_iterator_tag, T> { // ... } Iterator begin() { return (Iterator(root)); } Iterator end() { return (Iterator(NULL)); }

con los operadores apropiados sobrecargados.

Idealmente, me gustaría hacer esto;

class Foo { public: Foo() { std::list<int> x; std::vector<int> y; custom_list<int> z; iter = x.begin(); // OR iter = y.begin(); // OR iter = z.begin(); // ... }; private: std::iterator<int> iter; };

Pero obviamente estos son todos iteradores de diferentes tipos. Sin embargo, puedo suponer que todos los contenedores son del mismo tipo.

¿Hay una manera elegante de resolver este problema?


Mejor tarde que nunca...

Apareció el último número de C-Vu y adivinen qué contenía: así es, los iteradores que hacen exactamente lo que usted quería.

Desafortunadamente, debe convertirse en miembro de la ACCU para ver la revista (el artículo hace referencia al artículo sobrecargado del año 2000 al que David se vincula). Pero por un módico precio al año, obtienes una buena revista para leer, conferencias y grupos de usuarios. Cuando te conviertes en miembro, puedes ver los PDF de los números atrasados, entonces, ¿qué estás esperando ?


Un caso de tener cuidado con lo que pides. Las clases any_iterator que ves funcionan en un conjunto ilimitado de tipos de iteradores. Solo tienes tres, que sabes por adelantado. Claro, es posible que necesite agregar un cuarto tipo en el futuro, pero ¿y qué si eso toma O (1) líneas adicionales de código?

La gran ventaja de un conjunto cerrado de posibles tipos contenidos es que tienes un límite superior en sizeof (), lo que significa que puedes evitar el montón y la indirección que trae. Básicamente, rellenarlos todos en una variante :: boost y llamar a apply_visitor.