U3 Flashcards
Pregunta: ¿Qué representa la plantilla de clase Dynarray<> en C++?
Respuesta: Representa matrices unidimensionales de objetos almacenados en memoria libre, donde todos los objetos son del mismo tipo seleccionado en tiempo de compilación.
Pregunta: ¿Qué diferencia hay entre inicialización y asignación en el contexto de Dynarray<>?
Respuesta: La inicialización crea un objeto con un valor desde el principio, mientras que la asignación cambia el valor de un objeto ya existente.
Pregunta: ¿Cómo se garantiza la seguridad en el uso de Dynarray<> ante excepciones?
Respuesta: Implementando el constructor y el operador de asignación copia de manera que manejen adecuadamente la memoria dinámica y las excepciones.
Pregunta: ¿Qué es y para qué sirve el constructor copia en Dynarray<>?
Respuesta: El constructor copia inicializa un nuevo objeto como una copia exacta de otro, asignando espacio nuevo y copiando los elementos uno por uno.
Pregunta: ¿Cómo funciona el operador de asignación copia en Dynarray<> y qué problema resuelve?
Respuesta: Destruye la matriz original del objeto destino, asigna nueva memoria y copia los elementos, evitando fugas de memoria y asegurando la independencia entre objetos.
Pregunta: ¿Qué es la técnica copy-and-swap y cómo se aplica en Dynarray<>?
Respuesta: Es una técnica que crea una copia del objeto, intercambia su contenido con el objeto destino y luego destruye la copia antigua, mejorando la seguridad ante excepciones.
Pregunta: ¿Cuál es el propósito de las funciones begin() y end() en Dynarray<>?
Respuesta: Permiten iterar a través de la matriz desde el primer al último elemento, facilitando el uso de bucles for basados en rango para acceder o modificar elementos.
Pregunta: ¿Qué característica principal diferencia a std::vector<> de otras estructuras como Dynarray<> en C++?
Respuesta: std::vector<> permite cambiar dinámicamente su tamaño durante la ejecución del programa, a diferencia de Dynarray<>, que no permite modificar el número de elementos una vez establecido.
Pregunta: ¿Por qué std::vector<> es considerado eficiente en términos de localidad de memoria?
Respuesta: Porque almacena sus elementos en bloques contiguos de memoria, lo que aprovecha la jerarquía de caché de la computadora y mejora la eficiencia del acceso a los elementos.
Pregunta: ¿Cómo afecta la localidad espacial y temporal al rendimiento de std::vector<>?
Respuesta: Favorece el rendimiento debido a que es probable acceder a elementos cercanos en memoria poco después de un acceso inicial (localidad espacial) y a elementos ya accedidos anteriormente (localidad temporal).
Pregunta: ¿Qué función cumple la operación pushBack() en Vector<>?
Respuesta: Inserta un nuevo elemento al final del vector, aumentando su tamaño en una unidad. Si no hay espacio suficiente, reserva más memoria, duplicando la capacidad actual del vector.
Pregunta: ¿Cómo maneja Vector<> la inserción de elementos cuando se agota la capacidad?
Respuesta: Reserva un nuevo bloque de memoria con el doble de capacidad, copia los elementos existentes al nuevo bloque y elimina el bloque antiguo.
Pregunta: ¿Qué garantías ofrece la implementación de pushBack() en Vector<>?
Respuesta: Ofrece una garantía fuerte de excepciones, ya que si ocurre un error durante la inserción, el estado del vector no se altera y cualquier recurso adquirido se libera adecuadamente.
Pregunta: ¿Cuáles son las operaciones de acceso y modificación clave proporcionadas por Vector<>?
Respuesta: Incluye operaciones como pushBack() para añadir elementos, popBack() para eliminar el último elemento, y acceso seguro a elementos mediante at() que verifica el rango, además de iteradores begin() y end() para recorrer el vector.