El estándar dice:
Un deque es un contenedor de secuencia que admite iteradores de acceso aleatorio (27.2.7). Además, admite operaciones de inserción y borrado de tiempo constante al principio o al final; insertar y borrar en el medio toma tiempo lineal.
Sin embargo, también dice en la misma Cláusula:
Todos los requisitos de complejidad en esta Cláusula se establecen únicamente en términos del número de operaciones en los objetos contenidos. [Ejemplo: el constructor de copia de tipo
vector<vector<int>>
tiene una complejidad lineal, aunque la complejidad de copiar cada contenidovector<int>
es lineal en sí misma. - ejemplo final]
¿No significa esto que la inserción al comienzo de, digamos, deque<int>
puede tomar tiempo lineal siempre que no realice más que un número constante de operaciones en los int
s que ya están en la deque y el nuevo int
objeto que se está insertando? ?
Por ejemplo, supongamos que implementamos una deque utilizando un "vector de vectores de tamaño K". Parece que una vez cada K veces que insertemos al principio, se debe agregar un nuevo vector de tamaño K al principio, por lo que todos los demás vectores de tamaño K deben moverse. Esto significaría que la complejidad temporal de la inserción al principio se amortiza O (N / K) donde N es el número total de elementos, pero K es constante, por lo que esto es solo O (N). Pero parece que esto está permitido por el Estándar, porque mover un vector de tamaño K no mueve ninguno de sus elementos, y los "requisitos de complejidad" están "establecidos únicamente en términos del número de operaciones" en los int
objetos contenidos .
¿El estándar realmente permite esto? ¿O deberíamos interpretar que tiene un requisito más estricto, es decir , un número constante de operaciones en los objetos contenidos más un tiempo adicional constante?
vector<vector<int>>
pero luego lineal con respecto a los elementos del interior vector<int>
. Si solo considera el número de elementos del vector externo, consideraría copiar el vector interno como constante, aunque podría estar equivocado, ya es tarde aquí