複数のコンテナーを同時に反復処理する
C 11 は、範囲ベースのループや std::for_each など、コンテナーに多用途の反復メソッドを提供します。ただし、データ操作で繰り返されるタスクは、同じサイズの 2 つ以上のコンテナを同時に反復処理することです。
インデックス間の範囲ベースのループ
この特定のシナリオでは、範囲ベースのループを使用してコンテナのインデックスを反復処理することで、効率的で表現力豊かな解決策:
for (unsigned i : indices(containerA)) { containerA[i] = containerB[i]; }
indexs 関数は、コンテナーの遅延評価されたインデックスの範囲を返します。このアプローチは、コードの可読性を犠牲にすることなく、手動の for ループと同じ効率を実現します。
Zip Range
このパターンが頻繁に発生するデータ構造の場合は、「zip range」を使用します。 " コードをさらに簡素化できます:
for (auto& [a, b] : zip(containerA, containerB)) { a = b; }
zip 関数は、それぞれに対応する要素を含む一連のタプルを作成します。入力コンテナから。 C 17 より前は、もう少し冗長な構文が必要でした:
for (auto& &items : zip(containerA, containerB)) get<0>(items) = get<1>(items);
以上がC で複数のコンテナを同時に効率的に反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。