estoy usando MSVC 2010.¿Por qué este código es 100 veces más lento en la depuración?
Estoy tratando de eliminar duplicados (sin mantener ninguna de ellas) de una lista
¿Por qué es este código 100 veces más lento en el modo de depuración?
¿Hay alguna otra manera de eliminar todos los objetos que son equivalentes y hacerlo más rápido en modo de depuración?
Es hasta el punto que no puedo usar la depuración en este momento. Tardar minutos en procesarse durante unos segundos en la versión.
void SomeFunction()
{
std::list<Something> list;
std::list<Something>::iterator it1;
std::list<Something>::iterator it2;
for (it1 = list.begin(); it1 != list.end(); it1++)
{
for (it2 = list.begin(); it2!=list.end(); it2++)
{
if (it1->SomeValue() == it2->SomeValue())
{
if (it1 != it2)
{
list.erase(it1);
list.erase(it2);
it2 = list.begin();
it1 = it2++;
}
}
}
}
}
¿Por qué no ordena la lista y utiliza 'std :: unique'? –
Una forma general de hacer esto que sería mejor es repetir en la lista y almacenar cada elemento de un conjunto (si no está ya allí) sobre la marcha, luego convertir el conjunto a una lista. Eso es O (n) y no modifica la lista a medida que la atraviesa. La sugerencia de Kerrek es buena, y probablemente haya otras formas mejores. –
Probablemente debido a [iteradores de depuración] (http://msdn.microsoft.com/en-us/library/aa985982 (VS.100) .aspx) y [iteradores marcados] (http://msdn.microsoft.com/ en-us/library/aa985965 (VS.100) .aspx) está habilitado de forma predeterminada en las compilaciones de depuración (además, ya sabes, todas las optimizaciones están desactivadas). Vaya a los enlaces para ver cómo desactivarlos y vea si eso ayuda. – ildjarn