Supposons que nous avons une classe de carte (carte non ordonnée, liste, ensemble, tout ce qui fera aussi). Nous recherchons un élément spécifique. Après avoir appelé le membre find(), nous devons vérifier avec le membre end(). Mais find() sait déjà en interne s'il retourne un bon itérateur ou l'itérateur final. Pourquoi devrions-nous appeler à nouveau end()? Cela ajoute un peu de frais généraux.stl conteneur fin est redondant après trouver, alors quel est le raccourci
std::map<int,float> myMap;
// some other code to populate the map
// ...
std::map<int,float>::iterator myIt;
myIt = myMap.find(2); // doesn't this already know wheter its returning the end() iterator?
if (myIt != myMap.end()) { //calling end() here wastes some time because find
//already knew the result
std::cout << "Found, value is "<<(*myIt).second<<"\n";
} else {
std::cout << "Not found.\n";
}
Il devrait y avoir un moyen de savoir quel est le résultat de find() sans appeler end().
Vous vous inquiétez probablement trop de la micro-performance. – fredoverflow
Dure le temps en comparaison de quoi? Vous pensez qu'un appel à end() est cher ou quelque chose. Vous pensez que le compilateur n'a peut-être pas ajouté cela pour vous. Quelle autre interface pouvez-vous proposer de plus efficace? –
Avec GCC 4.5 -O2, il n'appelle pas '.end()'. Avec -O3 même le '.find()' est inline. – kennytm