Tengo tres preguntas con respecto al canje, lo más probable es que sea bastante básico para usted.Preguntas sobre el rendimiento del canje
(1) Con respecto a dos mismos contenedores tipo STL a
y b
, tanto las operaciones por debajo trabajarían
swap(a,b);
a.swap(b);
entiendo que la segunda está especializada para el recipiente (por ejemplo, sólo implica una serie de iterador swaps) mientras que el primero es un algoritmo global destinado a trabajar con tipos de datos genéricos y realiza una construcción de copia interna.
Mi pregunta es si escribo la primera, ¿usará el compilador el segundo independientemente, o tengo que tener cuidado de verificar si existe una especialización adecuada?
(2) ¿swap(a,b)
daría el mismo resultado con swap(b,a)
? Si una construcción de copia está involucrada y los objetos son de un tamaño considerablemente diferente, sospecho que puede ser importante.
(3) En los casos donde el operador sobrecargado ==
existe y es relativamente rápido, la verificación de a == b
antes del intercambio tendría sentido para evitar operaciones innecesarias. ¿El std::swap
aplica este control primero o realiza la operación independientemente?
¡Gracias por su tiempo!
¿No todo esto depende de la implementación específica del STL? No creo que puedas derivar nada de esto del estándar. –
El número 3 podría depender de la implementación. 1 es explícitamente requerido. –
Muchas gracias por la pronta respuesta. – Chrys