Sto usando MSVC 2010.Perché questo codice è 100 volte più lento nel debug?
Sto cercando di rimuovere duplicati (senza tenere uno di essi) da un elenco
Perché questo codice 100 volte più lento in modalità debug?
C'è un altro modo per rimuovere tutti gli oggetti equivalenti e renderlo più veloce in modalità di debug?
È al punto che non posso usare il debug al momento. Ci vogliono minuti per elaborare mentre pochi secondi in rilascio.
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++;
}
}
}
}
}
Perché non ordinare l'elenco e utilizzare 'std :: unique'? –
Un modo generale per farlo sarebbe meglio iterare attraverso l'elenco e memorizzare ogni elemento in un set (se non è già lì) mentre vai, quindi convertire il set in un elenco. Quello è O (n) e non modifica l'elenco mentre lo stai attraversando. Il suggerimento di Kerrek è buono e probabilmente ci sono altri modi migliori. –
Probabilmente a causa di [debug iterators] (http://msdn.microsoft.com/en-us/library/aa985982 (VS.100) .aspx) e [iteratori controllati] (http://msdn.microsoft.com/ en-us/library/aa985965 (VS.100) .aspx) abilitato di default nei build di debug (in più, si sa, l'intera ottimizzazione è disabilitata). Vai ai link per vedere come disabilitarli e vedere se questo aiuta. – ildjarn