wie kann man das optimieren?
-
die referenzen sparen gut was ein,teilweise statt 4x aufrufen der funktionen mit dereferenzierungen nurnoch einmal^^
-
... Desc& description=p->first; List& buffer_data=p->second; List& this_data=Tree.find(description)->second; Container::const_iterator& data_pos=Tree.find(description); ...
Das ist nicht dein ernst.
... Desc& description=p->first; List& buffer_data=p->second; Container::const_iterator& data_pos=Tree.find(description); List& this_data=data_pos->second; ...
Und schwups ist das ganze duetlich schneller.
-
Hi!
otze schrieb:
hmm da kamen wir fast aufs selbe ergebnis:
void delete_similar(List& this_data,List& buffer_data){ List::iterator this_iterator=this_data.begin(); List::iterator buffer_iterator=buffer_data.begin(); for(;buffer_iterator!=buffer_data.end();++buffer_iterator){ while(this_iterator!=this_data.end()){ if(*this_iterator!=*buffer_iterator)continue; this_data.erase(this_iterator); ++this_iterator; } } }
Die while-Schleife landet bei continue in einer Endlosschleife. Denn wenn das continue ausgeführt wird, wird doch das ++this_iterator nicht mehr ausgeführt und somit wird die if-Abfrage immer mit true ausgewertet. Mit einer for-Schleife klappt das aber wunderbar, wodurch es dann mit dem continue funktioniert.
for(;this_iterator!=this_data.end();++this_iterator){ if(*this_iterator!=*buffer_iterator)continue; this_data.erase(this_iterator); }
Code-Hacker
-
devil81 schrieb:
Bringts denn was in der Performance ?
Make it work, make it right, make it fast.
-
so, hoffe, alle beteiligten sind nun halbwegs mit dem ergebnis zufrieden, hab zuvor noch nie komplexere verschachtelungen programmiert, konnte also am anfang nicht ahnen, wie Krank das am ende werden würde...