Supposons que vous souhaitiez connaître l'indice numérique d'un élément lors de l'itération d'un conteneur qui ne propose pas d'itérateurs à accès aléatoire. Par exemple :
std::list<std::string> items;
int i = 0;
for (auto & item : items) item += std::to_string(i++);
Existe-t-il une façon plus idiomatique ou plus agréable de faire cela ? Je suppose que ce modèle se présente dans diverses situations. Je n'aime pas que l'indice entier soit disponible en dehors de la boucle. Le fait de mettre entre parenthèses la boucle et la définition de l'index dans un bloc local me semble également moche.
Bien sûr, lorsque le conteneur offre des itérateurs à accès aléatoire, on peut tirer parti de la différence entre les itérateurs, mais on ne peut alors pas utiliser le range-for :
std::vector<std::string> items;
for (auto it = items.begin(); it != items.end(); ++it)
*it += std::to_string(it - items.begin());
Bien que je ne montre qu'un exemple C++11, je cherche également des conseils pour C++0x et C++98.