C++ : Entendiendo y optimizando std::vector

Поделиться
HTML-код
  • Опубликовано: 9 янв 2025

Комментарии • 26

  • @vicenteroca2179
    @vicenteroca2179 5 лет назад +9

    Muchas gracias por tus videos, explicas bien y encima explicas cosas que nadie suele explicar

  • @adrianjacintoguillen
    @adrianjacintoguillen 3 года назад +2

    Me ha quedado mucho más claro como trabajar con std::vector y me has descubierto cosas como el reserve, muchas gracias.

  • @zoserquenaya3193
    @zoserquenaya3193 3 года назад +3

    muy ilustrativo, ahora tengo un mayor entendimiento acerca de los std::vector

  • @psykjavier
    @psykjavier 4 года назад +2

    que calidad de conocimiento, gracias por compartir su conocimiento ingeniero...

  • @Mike-fk1ql
    @Mike-fk1ql 5 лет назад +2

    Excelente profesor, recien descubro este canal, uy pero que explicacion y enseñanza la mejor pero por lejos

  • @krishcm3016
    @krishcm3016 5 лет назад +3

    Clase Magistral! Que buen canal me ha salido en recomendados 💯💯👨🏻‍💻

  • @sebastiantorreschavez5748
    @sebastiantorreschavez5748 3 года назад +2

    Estos si son videos de calidad! 👍

  • @1985stout
    @1985stout 4 года назад +2

    ¡Qué genial!, muy agradecido.

  • @drtadjakaroghli6898
    @drtadjakaroghli6898 5 лет назад +3

    Magistral como siempre

  • @oleksijm
    @oleksijm 5 лет назад +2

    magnífico, como siempre!

  • @JohngoLumpo
    @JohngoLumpo 5 лет назад +1

    Grande el vídeo. No sabia que se podia usar el 'using' de esa manera. Si que falta la función 'emplace_back' pero bueno, que hagan los deberes xD.
    Gracias por el vídeo.
    P.D.: La cámara me parece que está mejor en esta posición que en la anterior. La terminal se ve mucho más clara.

  • @viervogs4224
    @viervogs4224 Год назад +1

    Esto no lo sabía, ha sido un dataso para mí, la lección es que es mucho mejor reservar desde el principio un tamaño estimado en vez de dejar que el vector crezca cada vez que hacemos un push, ya que nos ahorramos el costo que significa reservar, copiar y eliminar, pero también me surge una pregunta, ¿vector tiene un método para eliminar los espacios extra que genera el crecimiento geométrico?

    • @ProfesorRetroman
      @ProfesorRetroman  Год назад

      ¿A qué te refieres exactamente con "eliminar los espacios extra que genera el crecimiento geométrico"? Técnicamente, cuando un vector no tiene más espacio disponible y añadimos un nuevo elemento, se dobla el espacio disponible y luego se añade el elemento. Ese espacio nuevo que queda disponible está pensado para que sigas añadiendo elementos. Si ese espacio lo "eliminas", entonces forzarás a que repita el comportamiento de (1) reservar doble espacio -> (2) copiar todos los elementos -> (3) eliminar espacio anterior -> (4) añadir el nuevo elemento, en cuanto añadas el próximo elemento. Si, por algún motivo, ya sabes que no vas a necesitar más espacio, quizá te interese más tener el espacio fijo desde un inicio y usar un std::array en vez de un std::vector. Aún así, si es a esto a lo que te refieres, tienes un método llamado shrink_to_fit() que descarta el espacio disponible al final de vector, dejándolo sólo con el espacio que ocupan sus elementos ( en.cppreference.com/w/cpp/container/vector/shrink_to_fit ). Sin embargo, cuidado con el método en concreto, porque tiene costes asociados como reservar un nuevo espacio que sea el justo y necesario y mover todos los elementos ahí.

  • @vicboma1
    @vicboma1 5 лет назад +2

    No sé si es el objetivo de la asignatura, pero pongo un pequeño aporte al video para los más curiosos.
    Costes asintóticos : baptiste-wicht.com/posts/2012/11/cpp-benchmark-vector-vs-list.html
    Magistral video, gracias!

    • @ProfesorRetroman
      @ProfesorRetroman  5 лет назад +1

      No es particularmente el objetivo de la asignatura, pero es una información tremendamente valiosa en ingeniería en general. Por supuesto, mis estudiantes están aquí para obtener un título de ingeniería, por lo que ver un análisis como este y entender cómo realizar correctamente pruebas y obtener resultados es crucial. Muy buen aporte. Muchas gracias Victor.

  • @Taller01digital
    @Taller01digital 4 года назад +2

    gracias profe, optimizador de la lechita jajaja

  • @silose
    @silose 5 лет назад

    Hola Profesor, ahí te dejo el Me Gusta

  • @javieralbizu2302
    @javieralbizu2302 5 лет назад +4

    Pues nada, a rediseñar y replantearme todos los vectores que tengo :)

  • @mentalthink1
    @mentalthink1 5 лет назад +1

    Me ha encantado, lo que se aprende aquí no tiene precio... pero me pregunto:
    no se podría reservar la memoria desde el constructor, si pones algo asi?¿:
    vector myVector(1000, valor),(cambiando a la clase que corresponda obviamente),
    estoy "rellenando" 1000 casillas con un valor como si usas .reserve?¿

    • @ProfesorRetroman
      @ProfesorRetroman  5 лет назад +1

      Puedes mirar los constructores de std::vector en cppreference www.cplusplus.com/reference/vector/vector/vector/ . Los constructores desde c++11 te permiten construir un vector con n valores, copiando a partir de otro, moviendo a partir de otro, o a partir de una lista de inicializadores. Incluso puedes darle un allocator, como a cualquier contenedor de la STL, para poder usar placement new, y poner la memoria que reserve donde tú quieras. Sin embargo, ninguno de ellos te permite ampliar el capacity de base, como si hicieras un reserve. Eso, de momento, se hace llamando a reserve.

    • @mentalthink1
      @mentalthink1 5 лет назад +1

      @@ProfesorRetroman Muchas Gracias por responder y la info.
      Por otro lado comentarte que la posición de la cámara se agradece, en otros vídeos a veces no se ve demasiado bien la proyección.

    • @ProfesorRetroman
      @ProfesorRetroman  5 лет назад +1

      Sí, estuve pensando como mejorar la posición de la cámara y se me ocurrió una forma. Aunque a mi se me ve menos y no miro a la cámara, creo que se ve bien lo que realmente importa, que es el contenido. Seguramente la mantendré

    • @setpowi
      @setpowi 5 лет назад +3

      Estaría muy bien poder escuchar lo que dicen los alumnos. El resto absolutamente genial. Gracias por compartir tu conocimiento :)

  • @platanomagico9528
    @platanomagico9528 5 лет назад +1

    buenas, podrias decirme la respuesta de 15:48?

    • @ProfesorRetroman
      @ProfesorRetroman  5 лет назад

      Antes debería decirte que en vídeos siguientes se responde a la pregunta con detalle (y se cuentan más cosas al respecto). También es importante que sepas que puedes responderla fácilmente tú mismo: pon un cout en el constructor, y otro en un constructor de copia de GameObject y sabrás cuántas veces se llama a cada uno. Cuando hagas eso, verás que se llama al constructor de GameObject (lo que lo construye en la pila, como objeto local) y después al constructor de copia (para copiar el objeto local a la memoria reservada en el heap para el vector).
      Es mejor que estas pruebas las hagas tú mismo, así podrás responder muchas más preguntas de las que yo pueda contestarte ;)

    • @platanomagico9528
      @platanomagico9528 5 лет назад +1

      @@ProfesorRetroman muchas gracias!!!