ヘッダーで提供されているように、複数のコンテナーで特定のことを行う方法はたくさんあります。algorithm
たとえば、あなたが与えた例でstd::copy
は、明示的なforループの代わりに使用することができます。
一方、通常のforループ以外に、複数のコンテナーを一般的に反復する組み込みの方法はありません。反復する方法はたくさんあるので、これは驚くべきことではありません。考えてみてください。1つのコンテナを1つのステップで、1つのコンテナを別のステップで繰り返すことができます。または、一方のコンテナを最後まで通過してから、もう一方のコンテナの最後まで挿入を開始します。または、他のコンテナを完全に通過して最初からやり直すたびに、最初のコンテナの1つのステップ。または他のパターン。または一度に2つ以上のコンテナ。など..。
ただし、最短のコンテナの長さまで2つのコンテナを反復処理する独自の「for_each」スタイルの関数を作成する場合は、次のようにすることができます。
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;
Container2::iterator i2;
for (i1 = begin1, i2 = begin2; (i1 != end1) && (i2 != end2); ++it1, ++i2) {
f(i1, i2);
}
}
もちろん、同様の方法で、任意の種類の反復戦略を作成できます。
もちろん、内部のforループを直接実行する方が、このようなカスタム関数を作成するよりも簡単であると主張するかもしれません...そして、1回か2回しか実行しないのであれば、あなたは正しいでしょう。しかし、良い点は、これが非常に再利用可能であることです。=)