ホームページ >バックエンド開発 >C++ >反復ループで無関係な区切り文字を回避する方法: A C 11 ソリューション?

反復ループで無関係な区切り文字を回避する方法: A C 11 ソリューション?

DDD
DDDオリジナル
2024-10-30 21:13:02605ブラウズ

How to Avoid Extraneous Separators in Iteration Loops: A C  11 Solution?

反復ループでの無関係なセパレーターの回避

一連の要素の反復では、多くの場合、連続する要素間にセパレーターを必要とするアクションの印刷または実行が含まれます。ただし、最後の要素の後にセパレータを追加することは望ましくない場合があります。

非破壊イテレータの従来のアプローチ

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 コンストラクトを使用したよりエレガントなソリューション

明示的な特殊なケーシングの代わりに、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。