option
Cuestiones
ayuda
daypo
buscar.php

PEL - Tema 3

COMENTARIOS ESTADÍSTICAS RÉCORDS
REALIZAR TEST
Título del Test:
PEL - Tema 3

Descripción:
Estructuras Lineales

Fecha de Creación: 2025/07/15

Categoría: Informática

Número Preguntas: 30

Valoración:(0)
COMPARTE EL TEST
Nuevo ComentarioNuevo Comentario
Comentarios
NO HAY REGISTROS
Temario:

¿Cuál es la diferencia fundamental entre inicialización y asignación en C++?. La inicialización ocurre antes del constructor; la asignación después. La asignación no destruye el valor anterior del objeto. La inicialización construye un objeto nuevo; la asignación reemplaza su valor. Ambas son equivalentes si el tipo tiene operador = definido.

¿Qué problema causa utilizar los constructores copia y operadores de asignación generados por defecto en Dynarray<T>?. La matriz no se puede copiar correctamente si es de tipos primitivos. El puntero first_ queda duplicado, apuntando a la misma zona de memoria. El objeto pierde el tipo T durante la copia. El tamaño del array se multiplica sin control.

¿Qué garantiza el constructor copia de Dynarray<T> implementado manualmente?. Que la matriz tenga el doble de tamaño. Que size_ y first_ se copien por valor. Que cada elemento se copie en un nuevo bloque de memoria. Que se use std::memmove automáticamente.

¿Qué ocurriría si Dynarray<T>::operator= no usara la técnica copy-and-swap?. Se perdería la garantía básica ante excepciones. La autoasignación no funcionaría. Se duplicaría el contenido de la matriz. Se liberaría memoria innecesariamente.

¿Qué rol cumple std::swap(size_, tmp.size_) en el operador de asignación de Dynarray<T>?. Intercambia los valores para evitar fugas de memoria. Asegura el orden de los elementos. Elimina el objeto temporal automáticamente. Evita copiar los elementos uno por uno.

¿Por qué no es necesario proteger contra autoasignación en el operator= de Dynarray<T>?. Porque std::swap() detecta autoasignación. Porque la clase no permite la autoasignación. Porque el coste del if es mayor que el de copiar. Porque el compilador lanza un error automáticamente.

¿Qué ocurre al ejecutar el siguiente código? Dynarray<int> a{5, 3}; Dynarray<int> b; b = a;. b comparte la memoria con a. b copia los elementos de a a una nueva zona. b se convierte en una referencia a a. b contiene elementos no inicializados.

¿Cuál es la razón principal para incluir tipos como iterator, value_type o reference en la interfaz pública?. Ocultan los punteros utilizados internamente. Permiten compatibilidad con la STL y otras plantillas. Son obligatorios para evitar errores de compilación. Sirven solo para documentar el código.

¿Cuál es la función de rangeCheck() en Dynarray<T>?. Aumentar la eficiencia de los accesos aleatorios. Permitir recorrer la matriz en orden inverso. Lanzar una excepción si se accede fuera de rango. Validar la copia entre dos matrices.

¿Qué ventaja tiene el acceso con at(i) frente al uso de operator[]?. at() permite modificar elementos protegidos. at() lanza una excepción si el índice es inválido. operator[] no funciona en matrices de enteros. operator[] es más lento que at().

¿Qué función iteradora devuelve un puntero al elemento siguiente al último de la matriz?. end(). rend(). last(). cbegin().

¿Cuál es la diferencia entre cbegin() y begin() en Dynarray<T>?. cbegin() devuelve una copia; begin() una referencia. cbegin() permite modificar elementos. cbegin() devuelve un puntero constante; begin() no. No hay diferencia.

¿Qué imprime este fragmento? Dynarray<int> d{5}; for (auto& x : d) x = 1; for (auto x : d) std::cout << x << ' ';. 1 1 1 1 1. 0 0 0 0 0. Error de compilación. Imprime direcciones de memoria.

¿Qué operador permite acceder a los elementos como si Dynarray fuera un array?. operator(). operator[]. operator*. operator->.

¿Qué garantía proporciona el constructor Dynarray(size_type size, const_reference val) ante excepciones?. Garantía débil: puede dejar memoria sin liberar. No ofrece ninguna. Garantía fuerte: estado original intacto si falla. Garantía de tiempo constante.

¿Qué diferencia clave existe entre Dynarray<T> y Vector<T>?. Vector<T> solo admite tipos primitivos. Dynarray<T> permite crecer dinámicamente; Vector<T> no. Vector<T> permite cambiar su tamaño durante la ejecución; Dynarray<T> no. Dynarray<T> tiene mayor eficiencia en la caché.

¿Qué propiedad del std::vector y del Vector<T> lo hace especialmente eficiente en el uso de la caché?. Almacenan los datos comprimidos. Usan aritmética modular para acceso. Almacenan los elementos en bloques contiguos de memoria. Evitan completamente los cache miss.

¿Qué ocurre cuando space_ == last_ al ejecutar pushBack()?. El vector lanza una excepción por desbordamiento. Se inserta el nuevo valor en una posición temporal. Se reserva un nuevo bloque de memoria y se duplican los elementos existentes. El valor se pierde porque no hay espacio.

¿Qué condición especial se contempla en pushBack() para el primer elemento insertado?. Se reserva espacio solo para uno. Se lanza una excepción si el valor es nulo. Se reserva espacio para dos elementos desde el inicio. Se utiliza una lista auxiliar.

¿Qué garantiza el bloque try-catch incluido en la reubicación de elementos dentro de pushBack()?. Que no haya errores de compilación. La garantía básica ante excepciones. La garantía fuerte ante excepciones. Que los elementos anteriores se borren automáticamente.

¿Qué operador se sobrecarga para permitir el acceso como si fuera un array clásico (v[i])?. operator*. operator(). operator->. operator[].

¿Cuál es el resultado de este código si el vector está vacío? Vector<int> v; v.popBack();. Elimina el elemento 0. Lanza una excepción por acceso fuera de rango. Decrementa space_ sin control. Produce comportamiento indefinido.

¿Qué significa que *space_ = val; ++space_; se encuentre fuera del bloque try en pushBack()?. El valor se guarda antes de que se reserve memoria. La escritura no puede lanzar excepciones. La excepción se captura automáticamente. La garantía fuerte no se mantiene.

¿Qué tipo de excepción lanza checkRange(i) si i >= size()?. std::range_error. std::bad_alloc. std::out_of_range. std::logic_error.

¿Qué ocurre si se olvida liberar la matriz original al reservar una nueva en pushBack()?. Se borra automáticamente con el destructor. No se puede seguir insertando. Se produce una fuga de memoria. No ocurre nada si se llama a at() después.

¿Por qué es eficiente reservar una capacidad que dobla el tamaño actual del vector al crecer?. Reduce el uso de punteros. Asegura espacio continuo en la pila. Minimiza la cantidad de realojos de memoria. Permite evitar llamadas a destructores.

¿Qué condición se evalúa en empty()?. Si last_ es igual a nullptr. Si el array contiene valores nulos. Si v_ == space_. Si size() es mayor que capacity().

¿Qué permite que begin() y end() devuelvan punteros?. La clase hereda de std::vector. Vector<T> almacena sus elementos en memoria contigua. El compilador convierte los iteradores automáticamente. Los punteros son parte de value_type.

¿Qué implicación tiene que pushBack() modifique space_ directamente?. Permite eliminar elementos en orden inverso. Evita usar v_.resize(). Aumenta el tamaño efectivo del vector. Borra los elementos previos automáticamente.

¿Qué permite la inclusión de using value_type, iterator, reference en la clase Vector<T>?. Evitar colisiones con std::vector. Facilitar la copia entre vectores. Compatibilidad con algoritmos genéricos de STL. Reducción del uso de memoria.

Denunciar Test
Chistes IA