Es muy común entre los que programamos en C++ el reinventar a menudo la rueda (incluso varias veces) y reprogramarse los contenedores básicos él mismo. Se suelen escudar en cuestiones de legibilidad de código, sobrecarga de llamadas, rapidez de ejecución. Es cierto que muchas veces es necesario tener muy claro como funciona algo, sobretodo con algortimos críticos sin embargo hay una serie de pros que me hacen decantarme por el uso de STL:
- efectividad: ganas tiempo en no tener que programar y hacer debug de tus contenedores. Además sabes que hay muchas más personas usándola y tienes cierta seguridad cuando las usas.
- rapidez de ejecución: es posible que tus contenedores sean más rápidos, pero en el tiempo que has usado para programarlos es posible que invitiéndolo en otros algortimos hubieras ganado más ciclos de cpu (o gpu :P).
- trabajos en equipo: cuando se trabaja en equipo es muy ventajoso que todo el grupo conozca muy bien las cosas básicas del código sobre el que se trabaja. Además casi nunca se suele estar de acuerdo en como deben funcionar los contenedores.
- Los iterators: te dan una versatilidad para cambiar de contenedor y trabajar con los mismos algortimos sobre cada uno bastante alta y que da aporta mucha efectividad a la hora de programar
pero también hay contras:
- No te evitas bugs… pero tampoco te libras de ellos si los programas tú. Por ejemplo hacer std::vector< std::vector > en algunas versiones de gcc (con la STL de GNU) tiene un bug.
- Código muchas veces ilegible, con lo cual hace difícil saber qué hacen exactamente.
- Múltiples implementaciones. Por un lado tienes la que traen por defecto los compiladores, STL de SGI, STL port. No es que sea un gran problema, pero hay contenedores y algortimos diferentes, ciertos detalles internos, etc.
- Los iterators: a algunos programadores les resulta engorroso tener que usar, por ejemplo, un iterator para eliminar un elemento de un std::vector
En resumen, para mi, STL sí, porque prefiero usar mi tiempo en crear algortimos diferentes a los de toda la vida, aunque creo que todo programador debería saber como implementar una lista enlazada o un vector. Tú que opinas?