¿Deberían los programadores usar STL o escribir su propio código? [closed]

6 minutos de lectura

avatar de usuario
munish

No sé mucho sobre las estructuras de datos de C++, pero me pregunto si ustedes (los programadores) usan STL o escriben su propio código. Después de todo, STL está diseñado para realizar tareas como buscar, reemplazar y mucho más a través de una lista de datos.

Alguien realmente no necesita aprender mucho sobre la lista vinculada, la búsqueda binaria y mucho más porque podría usar STL. ¿Qué sugieres?

  • No reinventes la rueda. Esto no significa que no entienda cómo funciona la rueda y cuándo es el mejor momento para usarla, pero STL es una biblioteca bien escrita y probablemente sería más segura/rápida de usar.

    – Nicolás

    26 de julio de 2011 a las 17:52

  • Supongo que esta pregunta no es tan abierta.

    – prusswan

    26 de julio de 2011 a las 19:34

  • @Philip: ¿Por qué horrible? ¿Suena como una pregunta legítima e importante para mí?

    – Enno Shioji

    27 de julio de 2011 a las 2:27

  • Posible engaño: ¿Debería usar la planta de aguas residuales del municipio o tratar de hacerlo yo mismo?

    – Martín Beckett

    27 de julio de 2011 a las 2:52

  • @Enno Shioji Ese era mi punto. Esta es una decisión de alto nivel sobre cómo iniciar un proyecto. La filosofía de la programación. Es una buena pregunta. Para programadores. Pero el desbordamiento de pila mantuvo este y envía todas las preguntas malas a los programadores. Nos sentimos maltratados allí.

    – Felipe

    27 de julio de 2011 a las 13:46

Debe usar STL, porque está bien probado y optimizado.

Eso no significa que no deba saber cómo escribir estas estructuras de datos usted mismo. Con esa capacidad en su haber, podrá elegir la mejor estructura de datos STL para su aplicación.

  • Yo diría que la respuesta aceptada es incorrecta. El Estándar es estrictamente neutral sobre si escribir su propio contenedor o no.

    – usuario1095108

    7 de diciembre de 2021 a las 12:36

Si bien la biblioteca de plantillas estándar es conveniente cuando se trata de realizar tareas como usted mencionó, como buscar, reemplazar, usar listas vinculadas, no debe reemplazar el conocimiento de lo que está sucediendo. en el interior de la Biblioteca.

Mencionó que no necesita aprender sobre listas vinculadas, búsquedas binarias y “mucho más”, sin embargo, debe tener al menos un conocimiento práctico de cómo funcionan estas estructuras de datos y procedimientos, ya que hará que usarlos (y saber cuándo usarlos) mucho más efectivo.

Básicamente, no tiene que reinventar la rueda, pero al menos sepa qué hace que las ruedas giren de manera efectiva.

avatar de usuario
Harald

Utilice STL y bibliotecas estándar en general cuando pueda. Primero, probablemente esté mucho mejor probado que su propio código, y segundo, ayuda a mantener su código portátil. La única vez que debe reescribir alguna de estas funciones es con fines de aprendizaje. Puede ser educativo escribir su propio mapa asociativo o lista enlazada, pero para el código de producción, quédese con un código bien probado y que cumpla con los estándares.

Un conocimiento práctico de las estructuras de datos subyacentes, los métodos y las aplicaciones de las herramientas proporcionadas por STL lo convertirán en un programador mucho mejor. Saber cuándo usar qué tipo de contenedor o qué algoritmo es tan importante como una implementación adecuada. A veces, la forma más fácil de comprender algunos de los conceptos más complejos es implementarlos usted mismo en el contexto de una clase de algoritmos y estructuras de datos.

Dicho esto, el código en STL ha sido escrito por expertos y refinado con el tiempo en una biblioteca estándar que utilizan millones de personas en todo el mundo. En la práctica, casi nunca hay una razón para “hacer el suyo propio”, excepto en casos extremos en los que el rendimiento (o el tamaño) importan hasta un punto crítico para su aplicación exacta.

avatar de usuario
Ed Staub

Dudo en escribir, ya que no he escrito C++ en 5 años. Pero me vinieron a la mente un par de cosas que aún no se han discutido.

Si la implementación no se ajusta a lo que necesita, no la use si puede escribir y probar la suya más fácilmente que usar la biblioteca. Recientemente me encontré con esto en Java, donde necesitaba un conjunto de bits rápido. Detalles: Hay dos clases relevantes en la JVM (BitSet y BigInteger). BitSet no admite la inicialización más que configurando un bit a la vez; BigInteger tiene un signo irrelevante que confunde las cosas y es inmutable, lo que es costoso en mi caso. Terminé escribiendo el mío propio, con pruebas, en unas pocas horas. Se ajusta mejor, es más rápido y puedo hacer lo que quiera con él.

La otra razón para escribir la suya propia es si no comprende la especificación de la implementación de la biblioteca en relación con sus requisitos, no puede probarla o leerla fácilmente para descubrir qué hace, y puede implementar fácilmente la suya. Este es/fue un problema particular con las implementaciones de STL que se envían (o al menos se solían enviar) con documentación concisa, inadecuada y críptica y un código fuente opaco y sin comentarios que pasa por encima de su cabeza como una gran ola rebelde.

Solo para agregar mi respuesta (del comentario anterior):

Sí, debería pensar en implementar, por ejemplo, una secuencia, una lista enlazada, utilizando su propio código.

Esto es lo que enseñan en los cursos de Comp Sci y no es sin una buena razón. Pero, si está buscando trabajar rápidamente, simplemente use STL.

Simplemente creo que la gente debería entender cómo funcionan realmente las herramientas.

avatar de usuario
Trenki

Uso la biblioteca estándar de C/C++ y STL porque ahorra mucho tiempo y no veo la necesidad de reinventar la rueda. También uso impulso donde puedo.

Todavía es un buen ejercicio de aprendizaje escribir su propia clase de contenedor y algoritmos.

¿Ha sido útil esta solución?