librerias - stl class c++
¿Hay una implementación legible del STL? (9)
Bueno, el STL es bastante complicado, así que creo que hay una cierta cantidad de complejidad esencial pasando aquí. No es sorprendente que pueda parecer un poco desconcertante a primera vista.
Dicho esto, tal vez podría consultar el STLport de Borland y ver si le resulta más fácil leerlo.
Estoy en Linux; mirando los encabezados STL; ellos son realmente muy complicados.
¿Existe, en alguna parte, una versión más pequeña de STL que tenga las características principales del STL, pero que en realidad sea legible?
¡Gracias!
Dos puntos clave se destacan:
- Ninguna implementación de la STL es legible sin una comprensión de los objetivos, la razón de ser, los beneficios y las limitaciones del idioma en sí, y el enfoque general.
- La mayoría de las implementaciones son legibles una vez que se tiene una comprensión profunda de (1) porque el código se auto-documenta en esas premisas. Puede que no te guste el formato , pero ese debería ser el menor de tus problemas.
Como nota al margen, es posible que tenga más éxito con la versión de MSVC porque no está intentando apuntar a muchos compiladores. Los errores del compilador y el comportamiento definido por la implementación dan como resultado varias soluciones sutiles. A medida que esas soluciones crecen en número (como ciertamente sucede cuando se agregan más compiladores), el código puede volverse muy rápido.
El STL es una biblioteca altamente optimizada que hace la mayor parte de lo que hace aprovechando inteligentemente las características avanzadas de C ++ y el compilador subyacente. Además, muchas cosas están incluidas, por lo que no hay un verdadero grupo de código para ver en una aplicación. Yo recomendaría seguir los consejos de Neil.
Existe un libro The C ++ Standard Template Library , co-escrito por los diseñadores originales de STL Stepanov & Lee (junto con PJ Plauger y David Musser), que describe una posible implementación, completa con código: consulte http://www.amazon.co.uk/C-Standard-Template-Library/dp/0134376331 .
Para una explicación más reciente y exhaustiva de las "reglas" de STL (como los iteradores), consulte un nuevo libro en coautoría de Stepanov: http://www.elementsofprogramming.com/
Si disfrutas las matemáticas, este libro te emocionará, porque lo que describen los autores es esencialmente un álgebra de cálculo. El sitio incluye un capítulo de muestra.
Sí, hay una implementación original del STL por Alexander Stepanov y Meng Lee. Es la implementación de STL más legible que he visto. Puedes descargarlo desde aquí .
A continuación se muestra una implementación de par. Tenga en cuenta lo legible que realmente era el código fuente:
#include <bool.h>
template <class T1, class T2>
struct pair {
T1 first;
T2 second;
pair() {}
pair(const T1& a, const T2& b) : first(a), second(b) {}
};
template <class T1, class T2>
inline bool operator==(const pair<T1, T2>& x, const pair<T1, T2>& y) {
return x.first == y.first && x.second == y.second;
}
template <class T1, class T2>
inline bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y) {
return x.first < y.first || (!(y.first < x.first) && x.second < y.second);
}
template <class T1, class T2>
inline pair<T1, T2> make_pair(const T1& x, const T2& y) {
return pair<T1, T2>(x, y);
}
De regreso a las raíces!
Tenga en cuenta que los encabezados STL de GCC tienen el tabulador establecido en ocho. Vuelva a configurar su editor o reemplace las pestañas con ocho espacios y debería ser mucho más legible.
Utilizo la biblioteca estándar de C ++: un tutorial y una referencia y puedo recomendarlo. Por supuesto, no es algo que lea de principio a fin, pero es una referencia muy útil. Echa un vistazo a los comentarios en Amazon también.
RDESTL proporciona un "pequeño subconjunto de la funcionalidad STL" (pero también tiene algunos extras). Personalmente, encontré el código bastante instructivo y fácil de navegar que los grandes como la implementación de STLPort o Dinkumware que se incluye con VC ++.