Renvoyer &iterator retournera l'adresse de l'itérateur. Si vous voulez retourner un moyen de se référer à l'élément, retournez l'itérateur lui-même.
Attention, il n'est pas nécessaire que le vecteur soit un global pour retourner l'itérateur/pointeur, mais les opérations dans le vecteur peuvent invalider l'itérateur. L'ajout d'éléments au vecteur, par exemple, peut déplacer les éléments du vecteur à une position différente si la nouvelle taille() est supérieure à la mémoire réservée. La suppression d'un élément avant l'élément donné du vecteur fera en sorte que l'itérateur se réfère à un élément différent.
Dans les deux cas, en fonction de l'implémentation de la STL, il peut être difficile de déboguer avec des erreurs aléatoires qui se produisent très souvent.
EDIT après le commentaire : 'oui, je ne voulais pas retourner l'itérateur a) parce qu'il est constant, et b) parce qu'il n'est sûrement qu'un itérateur local et temporaire ? - Krakkos'
Les itérateurs ne sont pas plus ou moins locaux ou temporaires que n'importe quelle autre variable et ils sont copiables. Vous pouvez le retourner et le compilateur fera la copie pour vous comme il le fera avec le pointeur.
Maintenant avec la constance. Si l'appelant veut effectuer des modifications sur l'élément retourné (qu'il s'agisse d'un pointeur ou d'un itérateur), vous devez utiliser un itérateur non constant. (Il suffit de supprimer le "const_" de la définition de l'itérateur).