Introducción:
STL es una gran biblioteca, y útil en muchos casos, pero definitivamente no resuelven todas las situaciones. ¡Respondiendo STL o!STL es como responder "¿Cumple STL con tu necesidad o no?"
Pros de STL
- En la mayoría de las situaciones, STL tiene un recipiente que se ajustan para una solución dada.
- Está bien documentado
- Es bien sabido (programadores por lo general ya lo saben, entrar en un proyecto es más corto)
- Se ha probado y estable.
- Es multiplataforma
- Se incluye con cada compilador (no agregar una tercera dependencias de bibliotecas)
- STL ya está implementado y listo
- STL es brillante, ...
Contras de STL
No importa que necesite un simple Gráfico, Árbol Rojo-Negro, o una base de datos muy compleja de elementos con un AI que administre acceso concurrente th en bruto una computadora cuántica. El hecho es que STL no lo hace, y nunca resolverá todo.
Los siguientes aspectos son solo algunos ejemplos, pero básicamente son consecuencia de este hecho: STL es una biblioteca real con límites.
Excepciones: relé STL sobre las excepciones, por lo que si por alguna razón usted no puede aceptar excepciones (por ejemplo, la seguridad crítico), no se puede utilizar STL. ¡Derecha! las excepciones pueden deshabilitarse, pero eso no resuelve el diseño de la retransmisión de STL en ellas y eventualmente llevará a un bloqueo.
Necesidad de concreto (no incluido) estructura de datos: gráfico, árbol, etc.
limitaciones especiales de complejidad: Usted podría descubrir que STL contenedor de propósito general no es el más óptimo para su código de cuello de botella.
Consideraciones de concurrencia: o necesita concurrencia y STL no proporciona lo que necesita (por ejemplo, el bloqueo lector-escritor no se puede (fácilmente) utilizar debido al bidireccional [] operator
). O puede diseñar un contenedor que se beneficie de multi-threading para un acceso/búsqueda/inserción/lo que sea mucho más rápido.
STL necesita satisfacer sus necesidades, pero el cambio también es cierto: debe cumplir con las necesidades de STL. No intente utilizar std::vector
en un microcontrolador incorporado con 1K de RAM no administrada.
Compatibilidad con otras bibliotecas: puede ser que, por razones históricas, las bibliotecas que utiliza no acepten STL (por ejemplo, QtWidgets hace un uso intensivo de su propia QList). Convertir contenedores en ambas direcciones podría no ser la mejor solución.
la implementación de su propio contenedor
Después de leer esto, usted podría pensar: "Bien, estoy seguro de que puedo hacer algo mejor para mi caso específico de STL hace." ¡ESPERE!
La implementación de su contenedor convertido correctamente muy rápidamente en una tarea enorme: es no sólo acerca de cómo implementar algo de trabajo, puede que tenga que:
- Documento profundamente, incluyendo limitaciones, complejidad del algoritmo, etc.
- esperar errores, y les resolver
- necesidades adicionales entrantes: usted sabe, esta función que falta, esta conversión entre tipos, etc.
- Después de un tiempo, usted podría querer refactorizar, y cambiar todas las dependencias (demasiado tarde?)
- ....
código utilizado que en el fondo en el código como un contenedor es definitivamente algo que toma tiempo para poner en práctica, y debe ser, aunque con cuidado.
El uso de la biblioteca tercera parte
No STL no significa necesariamente que la costumbre. Hay muchas bibliotecas buenas en la red, algunas incluso con licencia permisiva de código abierto.
Agregar o no una biblioteca adicional de terceros es otro tema, pero vale la pena ser considerado.
Siempre encontré que los contenedores SDL son todos muy ligeros. Verifique su implementación de STL para ver cuánta memoria usan en realidad. – Albert
Bastante. Si STL hace lo que quieres, úsalo. Cuando ya no hace lo que desea, es cuando debería considerar no usarlo. – beldaz