一連の要素の反復では、多くの場合、連続する要素間にセパレーターを必要とするアクションの印刷または実行が含まれます。ただし、最後の要素の後にセパレータを追加することは望ましくない場合があります。
C スタイルの for ループで配列を反復処理する場合、または非破壊イテレータを使用する場合サイズが不明なシーケンスの場合、最後の要素を特殊なケーシングにすることで余分な区切り文字を防ぐことができます:
<code class="cpp">for (const auto& item : items) { cout << item; if (std::next(it) != items.cend()) { // Not the last element cout << separator; } }</code>
明示的な特殊なケーシングの代わりに、C 11 ではこれを達成するためのよりクリーンな方法:
<code class="cpp">const auto separator = "WhatYouWantHere"; const auto* sep = ""; for (const auto& item : items) { std::cout << sep << item; sep = separator; // Only assign when not on the last element }</code>
このアプローチでは、ポインター変数 sep がセパレーターがまだ印刷されているかどうかを追跡します。最初の要素に遭遇したとき、sep は空であるため、何も出力されません。ループが進むにつれて、sep に区切り値が割り当てられます。後続のすべての要素では、要素の前に区切り文字が印刷されます。
以上が反復ループで無関係な区切り文字を回避する方法: A C 11 ソリューション?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。