不要な区切り文字を使用せずにCで連続する要素のペアを反復処理する方法は?

Barbara Streisand
リリース: 2024-10-27 04:20:29
オリジナル
261 人が閲覧しました

How to Iterate Over Consecutive Element Pairs in C   without Unwanted Separators?

C イディオムを使用した連続する要素ペアの反復

一般的なプログラミング タスクの 1 つは、コレクションを反復し、コレクションの連続する各ペア間でアクションを実行することです。要素。基本的な ranged-for ループで繰り返しを処理できますが、多くの場合、最後に不要な区切り文字が発生します。

幸いなことに、この問題を解決するための慣用的なアプローチがいくつかあります。 1 つの方法では、追加のポインターを使用してセパレーターの状態を追跡します。

<code class="cpp">const auto separator = "WhatYouWantHere";
const auto* sep = "";
for(const auto&amp; item : items) {
    std::cout << sep << item;
    sep = separator;
}
ログイン後にコピー

この例では、sep ポインターは空の文字列に初期化されます。ループが進行するにつれて、最終要素以外に遭遇するたびに、区切り文字列を使用して sep が更新されます。デフォルトでは、sep は最初の要素の前に空の文字列となり、先頭のセパレータはありません。

あるいは、一部の C ライブラリは、セパレータ ロジックを処理する特殊なイテレータを提供します。たとえば、Boost Range ライブラリには、隣接する_filtered 関数が含まれています。この関数を使用すると、述語を連続する要素のペアに適用し、述語に失敗したものを除外できます。

<code class="cpp">#include <boost/range/algorithm/adjacent_filtered.hpp>

for(auto& adjacent_pair : boost::adjacent_filtered(items, [](const auto& lhs, const auto& rhs) { return lhs != rhs; })) {
    std::cout << adjacent_pair.first << " separator " << adjacent_pair.second;
}</code>
ログイン後にコピー

このアプローチは、簡潔でエレガントなソリューションを提供します。ただし、外部ライブラリを使用する必要があります。最終的に、どのイディオムを使用するかの選択は、プログラマーの特定のニーズと好みによって決まります。

以上が不要な区切り文字を使用せずにCで連続する要素のペアを反復処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート