Il y a beaucoup de façons de faire des choses spécifiques avec plusieurs conteneurs prévus à l' algorithm
- tête. Par exemple, dans l'exemple que vous avez donné, vous pouvez utiliser std::copy
plutôt d'une volonté explicite de la boucle.
D'autre part, il n'est pas intégré de manière générique itérer plusieurs récipients autres que la normale pour la boucle. Ce n'est pas surprenant, car il y a beaucoup de façons pour effectuer une itération. Pensez-y: vous pouvez parcourir un conteneur avec une étape, un conteneur avec une autre étape; ou par l'intermédiaire d'un récipient jusqu'à ce qu'il arrive à la fin et puis commencer à insérer tandis que vous allez jusqu'à la fin de l'autre contenant; une étape de la première conteneur pour chaque fois que vous avez complètement passer par l'autre récipient puis recommencer; ou de quelque autre motif, ou de plus de deux conteneurs à la fois; etc ...
Toutefois, si vous voulez faire votre propre "for_each" style de la fonction qui parcourt les deux récipients seulement jusqu'à la longueur de la plus courte, vous pourriez faire quelque chose comme ceci:
template <typename Container1, typename Container2>
void custom_for_each(
Container1 &c1,
Container2 &c2,
std::function<void(Container1::iterator &it1, Container2::iterator &it2)> f)
{
Container1::iterator begin1 = c1.begin();
Container2::iterator begin2 = c2.begin();
Container1::iterator end1 = c1.end();
Container2::iterator end2 = c2.end();
Container1::iterator i1;
Container1::iterator i2;
for (i1 = begin1, i2 = begin2; (i1 != end1) && (i2 != end2); ++it1, ++i2) {
f(i1, i2);
}
}
Évidemment, vous pouvez faire toute sorte d'itérations de la stratégie que vous voulez d'une manière similaire.
Bien sûr, vous pourriez dire que juste faire la boucle intérieure est plus facile que d'écrire une fonction personnalisée comme ça ... et vous auriez raison, si vous allez seulement faire une ou deux fois. Mais la bonne chose est que c'est très réutilisables. =)