Para responder a esta pregunta, primero se debe entender cómo se implementa std :: vector. En palabras simples, vector es una matriz redimensionable que implica que los elementos se almacenan contiguamente en la memoria. Entonces, cuando uno realiza y borra en el vector, digamos que el primer elemento se borra, todos los elementos anteriores se moverán una vez a la ubicación de la memoria izquierda.
En su caso de prueba, podría haber 3 escenarios:
- Se eliminan 100 elementos contiguos de cualquier lugar que no sea el final:
Los otros elementos se moverán a la izquierda una vez. es decir, 900 movimientos + 100 destrucción - Se eliminan 100 elementos aleatorios:
Los elementos se moverán 100 veces. es decir, 100 * 900 movimientos (simplificado) +100 destrucción - 100 elementos contiguos se eliminan del final: Sin movimientos + 100 destrucción.
Crear un nuevo vector y empujar elementos hacia él será lineal, es decir, 900 instrucciones.
pero entonces la pregunta es ¿qué harás con el viejo vector? un std :: vector clear significaría 1000 destrucción / disminución del recuento de ref.
- ¿Son todos los cursos de álgebra lineal tan poco intuitivos?
- ¿Cómo podemos pensar en la descomposición de valores singulares?
- ¿Deberían las entradas de los vectores en un espacio vectorial ser del mismo campo de sus escalares?
- ¿Qué significa que el determinado es linealmente independiente?
- ¿Son los escalares equivalentes a las matrices de orden 1 x 1?
Hay muchas otras variables a tener en cuenta, ¿cuál es el tipo de datos de los POD vectoriales? Se destruyen trivialmente, por lo que la complejidad del tiempo es constante. En general, hay otras cosas a tener en cuenta al insertar elementos, std :: move sería mucho más rápido y seguro para mover elementos.