2009-02-18 11 views
5

Estoy aprendiendo C++ y el libro que estoy leyendo (El lenguaje de programación C++) dice que no reinvente la rueda, que confíe en las bibliotecas estándar. En C, a menudo termino creando una lista vinculada, y la iteración de la lista de enlaces una y otra vez (tal vez lo estoy haciendo mal no estoy seguro), por lo que las ideas de contenedores disponibles en C++, cadenas y algoritmos realmente me atraen . Sin embargo, he leído un poco en línea y escuché algunas críticas de mis amigos y compañeros de trabajo sobre STL, así que pensé que tal vez elegiría algunos cerebros aquí.¿Cuáles son algunas de las mejores prácticas de uso de la Biblioteca estándar de C++?

¿Cuáles son algunas de las mejores prácticas para usar STL y qué lecciones ha aprendido sobre STL?

+0

Me interesarían las quejas sobre el STL para poder derribarlas. –

+0

Martin, mi queja es fácil de usar. cuando necesito pasar dos iteradores, eso es, en el mejor de los casos, un inconveniente y, en el peor, un gran inconveniente, p. count (obj.getVecByVal(). begin(), obj.getVecByVal(). end(), 5) falla nonobviously (debido a iterar en copias separadas) - por lo que se necesita un local con nombre –

+0

Martin - cuando vuelven a aparecer Voy a publicar una nueva pregunta. En su mayoría ha sido sobre bugginess y lentitud. –

Respuesta

14

Hay un libro complementario de la serie Effective C++, que se llama "Effective STL". Es un buen punto de partida para aprender sobre las mejores prácticas utilizando la biblioteca Standard C++ (neé STL).

10

Es posible que desee recoger una copia de "efectiva C++: 50 maneras específicas para mejorar sus programas y Diseño (2ª Edición)":

http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0201924889

que he encontrado que sea muy valioso, y sigue siendo muy relevante hoy, incluso si no está programando en C++.

+0

Tal vez "STL efectivo" por el mismo autor sería más al punto? –

+0

Leer los 3 de sus libros en C++ definitivamente es una mejor práctica. – twk

+0

Impresionante. Veré estos libros. :) –

6

Si realmente desea aprender la Biblioteca estándar de C++ (que incluye cosas como cadenas, que tradicionalmente no se han visto como parte de la STL), necesita un buen libro. El mejor en esta área es "The C++ Standard Library" by Nicolai Jossutis.

1

usted debe entender el concepto de plantilla , y otra polimorfismo, con el fin de utilizar de manera eficiente el TEL.

1

para aprender sobre STL necesita comprender las plantillas y también debe ser bueno en las estructuras de datos.

3

¿Por qué no nos dice esas críticas y le responderemos? Si las críticas son válidas, te diremos eso. Y si no lo son, te diremos por qué no.

El STL tiene una historia mixta, porque inicialmente, 1) pocas personas lo entendieron, y 2) pocos compiladores lo implementaron correctamente. Pero eso fue hace una década. ¿Hoy? Funciona. Es eficiente. Soluciona muchos problemas. El mayor problema es que lleva tiempo entender cómo funciona.

La mejor práctica más simple es "Use el STL siempre que ofrezca la funcionalidad que necesita". Y es difícil ofrecer consejos más específicos a menos que sepamos a qué críticas se enfrenta.

Pero, en general, es típico que las personas que lo critican sean simplemente y no los programadores de C++. Los programadores C que aprendieron a usar clases entran en esta categoría.

5

Los únicos casos en los que puedo pensar cuando el SC++ L no es apropiado para usar son algunas situaciones raras en las que no se proporciona una implementación adecuada (tal vez estás trabajando en algún oscuro plataforma para la cual solo se han implementado compiladores de C++ limitados) o se requiere un rendimiento extremo (tal vez para el código que existe en el núcleo de un sistema de representación gráfica para juegos de próxima generación).

Si está usando una computadora normal, es 99% seguro de que no está en el primer caso.En cuanto al segundo caso, solo debe considerar implementar su propio conjunto de contenedores y algoritmos por razones de rendimiento si tiene pruebas definitivas de herramientas de buen perfil de que el cuello de botella en su programa es el SC++ L.

La mejor práctica con respecto al SC++ L es simplemente usarlo siempre que sea posible. Además, casi todos los códigos modernos de C++ hacen un uso intensivo de Boost, que se puede considerar una extensión excelente y masiva para SC++ L. Cada vez que desee realizar una tarea algorítmica bastante estándar, debe usar Google para ver si SC++ L o Boost proporcionan instalaciones provadas, probadas y probadas para llevar a cabo esta tarea.

2

El STL fue escrito por los mejores cerebros. Probablemente no se te ocurra una mejor implementación que eso en la mayoría de los casos. Su rendimiento es bueno, no tiene errores, y es un buen estándar para pasar parámetros entre métodos, API, componentes de código, y no hace falta decir que encapsula todo lo feo. La cuestión es que debe saber cómo elegir el contenedor correcto para su problema. De lo contrario, es posible que no disfrute de sus beneficios. Hay algunos artículos en la web sobre cómo elegir el contenedor STL correcto. Un buen enlace es: STL Containers , y tiene un buen diagrama de flujo de cómo recoger su contenedor.

Cuestiones relacionadas