2010-08-22 18 views
0

J'ai un code qui utilise un itérateur à boucle à travers tous les éléments d'un unordered_map, mais dans cette boucle, il y a plusieurs autres processus où je stocke itérateurs à des éléments particuliers sur la carte , et généralement faire beaucoup de sauter autour, mais pas itératif (à l'exclusion de l'itérateur le plus à l'extérieur).const_reference ou iterator pour la carte (lorsqu'ils ne sont pas en fait itérer)

Il me semblait qu'il peut être plus approprié d'utiliser un unordered_map::const_reference à un élément si je ne suis pas fait itérer. Est-ce vrai? La seule chose qui m'empêche d'utiliser const_references est que de mes recherches rapides sur google, ils semblent très peu utilisés par la population, ou du moins peu discuté.

Répondre

1

exactitude Const est l'une des clés de programmation C++.
L'écriture d'un programme et l'ajout de const correction après le fait est très difficile (car il cascades à travers le code), vous devez le faire à l'avance.

En tant que tel, vous devriez préférer utiliser const_iterators sur itérateurs. Mais comme toutes choses, c'est un appel au jugement. Personnellement: Si je ne vais pas modifier des éléments dans le conteneur alors j'utiliserais const_iterators mais s'il y a une possibilité d'appeler une méthode non const sur un objet alors vous devez simplement utiliser l'itérateur.

+0

Mais il existe aussi des const_iterators. J'ai essayé d'expérimenter l'utilisation const_references, mais je ne l'ai pas trouvé un moyen de les initialiser sans utiliser un itérateur – zenna

+0

Désolé que manquer: Une fois que vous avez trouvé l'élément, il peut être judicieux d'utiliser la référence const itérateurs peuvent devenir invalidée dans certaines conditions. Encore une fois, c'est un appel de jugement en fonction de votre code. Facile à lire signifie facile à entretenir et à modifier. Donc, utilisez la méthode qui rend le code aussi facile à maintenir que possible. –