2011-03-07 5 views
6

duplicados posibles:
Preincrement faster than postincrement in C++ - true? If yes, why is it?
Is there a performance difference between i++ and ++i in C++?iteradores de STL: incremento de prefijo más rápido?

yo nos dijeron que cuando se utiliza el STL y es iteradores, siempre debería usar en lugar de ++iteriter++.

cito:

Debido a que sólo puede ser más rápido, más lento que nunca

Es esto cierto?

+0

Duplicado: http://stackoverflow.com/questions/2020184/preincrement-faster-than-postincrement-in-c-true-if-yes-why-is-it (et al) – gregg

Respuesta

10

Sí. Es cierto en general. El incremento postfix está cargado con la tarea de preservar y devolver el valor antiguo del iterador. Eso requiere tiempo y esfuerzo, que es lo que generalmente lo hace más lento.

Es generalmente cierto para todos los operadores de incremento/decremento sobrecargados que implementan la semántica pre/post tradicional.

Este tema ha sido derrotado. Haga una búsqueda aquí en "prefix postfix" para obtener una gran cantidad de explicaciones más detalladas.

+2

Un buen optimizador a menudo puede eliminar la copia del valor anterior, especialmente si no se utiliza. Entonces, "más lento" probablemente debería ser "no más rápido". –

+0

@Bo Persson: Es por eso que dije "en general". – AnT

+1

No, usted dijo "generalmente más lento", dije "generalmente no más rápido". :-). La pregunta es: ¿Por qué usar el incremento de publicación si no es más rápido? ¡Sin razón! –

5

Se puede ver en este ejemplo que se ha creado una temperatura, en postfix ... Esto más lentamente que el prefijo, donde nadie se crea avanzada de objetos

// Define prefix increment operator. 
Point& Point::operator++() 
{ 
    _x++; 
    _y++; 
    return *this; 
} 

// Define postfix increment operator. 
Point Point::operator++(int) 
{ 
    Point temp = *this; 
    ++*this; 
    return temp; 
} 

++ iter más rápido que iter ++., Porque no crear copia del objeto

Cuestiones relacionadas