Si vous avez déjà restreint ou codé en dur votre algorithme à l'utilisation d'un fichier std::vector::iterator
y std::vector::iterator
seulement, la méthode que vous finirez par utiliser n'a pas vraiment d'importance. Votre algorithme est déjà concrétisé au-delà du point où le choix de l'une ou l'autre peut faire une quelconque différence. Les deux font exactement la même chose. C'est juste une question de préférence personnelle. Personnellement, j'utiliserais la soustraction explicite.
Si, en revanche, vous souhaitez conserver un degré de généralité plus élevé dans votre algorithme, c'est-à-dire laisser la possibilité qu'un jour, dans le futur, il puisse être appliqué à un autre type d'itérateur, alors la meilleure méthode dépend de votre intention. Elle dépend du degré de restriction que vous souhaitez appliquer au type d'itérateur qui peut être utilisé ici.
-
Si vous utilisez la soustraction explicite, votre algorithme sera limité à une classe assez étroite d'itérateurs : les itérateurs à accès aléatoire. (C'est ce que vous obtenez maintenant de std::vector
)
-
Si vous utilisez distance
votre algorithme supportera une classe d'itérateurs beaucoup plus large : les itérateurs d'entrée.
Bien sûr, le calcul distance
pour les itérateurs à accès non aléatoire est en général une opération inefficace (alors que, là encore, pour les itérateurs à accès aléatoire, elle est aussi efficace que la soustraction). C'est à vous de décider si votre algorithme est efficace ou non. c'est logique pour les itérateurs à accès non aléatoire, en termes d'efficacité. Si la perte d'efficacité qui en résulte est dévastatrice au point de rendre votre algorithme complètement inutile, alors vous devriez vous en tenir à la soustraction, interdisant ainsi les utilisations inefficaces et forçant l'utilisateur à chercher des solutions alternatives pour d'autres types d'itérateurs. Si l'efficacité des itérateurs à accès non aléatoire reste dans une fourchette utilisable, alors vous devriez utiliser distance
et documenter le fait que l'algorithme fonctionne mieux avec des itérateurs à accès aléatoire.