Tout le monde rencontre ce problème à un certain point:
for(const auto& item : items) {
cout << item << separator;
}
... et vous obtenez un supplément de séparateur que vous ne voulez pas à la fin. Parfois il n'est pas l'impression, mais, disons, d'effectuer une autre action, mais telles que les actions consécutives du même type nécessitent quelques séparateur de l'action, mais le dernier ne l'est pas.
Maintenant, si vous travaillez avec de la vieille école pour les boucles et un tableau, vous le feriez
for(int i = 0; i < num_items; i++)
cout << items[i];
if (i < num_items - 1) { cout << separator; }
}
(ou vous pouvez cas le dernier élément de la boucle.) Si vous avez quelque chose qui admet la non-destructive des itérateurs, même si vous ne savez pas sa taille, vous pouvez le faire:
for(auto it = items.cbegin(); it != items.cend(); it++) {
cout << *it;
if (std::next(it) != items.cend()) { cout << separator; }
}
Je n'aime pas l'esthétique de ces deux derniers, et comme variaient pour les boucles. Puis-je obtenir le même effet qu'avec les deux derniers, mais en utilisant plus chic C++11ish constructions?
Edit:
Pour élargir la question plus loin (au-delà, de dire, de cette seule), je vais dire que je n'aime pas expressément ont cas le premier ou le dernier élément. C'est un "détail de l'implémentation" que je ne veux pas être dérangé. Donc, dans l'imaginaire-C++, peut-être quelque chose comme:
for(const auto& item : items) {
cout << item;
} and_between {
cout << separator;
}