ホームページ > バックエンド開発 > C++ > C でフラット化イテレータを作成してネストされたコンテナを反復処理するにはどうすればよいですか?

C でフラット化イテレータを作成してネストされたコンテナを反復処理するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-29 03:19:08
オリジナル
623 人が閲覧しました

How Can I Create a Flattening Iterator in C   to Iterate Over Nested Containers?

C でのイテレータのフラット化

vector> などのコンテナのコンテナがあるシナリオを考えてみましょう。 、要素を単一のシーケンスであるかのように、フラット化された方法で反復処理したいとします。ここで、フラット化イテレータの概念が登場します。

主要なライブラリには既存のフラット化イテレータ実装がないため、以下に基本的な実装を示します。

#include <algorithm>
#include <iostream>
#include <set>
#include <vector>

template <typename OuterIterator>
class flattening_iterator
{
public:
    // ... Iterator definitions and implementation

private:
    void advance_past_empty_inner_containers()
    {
        // ... Advance logic
    }

    // ... Private members
};

template <typename Iterator>
flattening_iterator<Iterator> flatten(Iterator it)
{
    // ... Return a flattening iterator for a single range
}

template <typename Iterator>
flattening_iterator<Iterator> flatten(Iterator first, Iterator last)
{
    // ... Return a flattening iterator for a range
}
ログイン後にコピー

この実装により、次のことが可能になります。次の例に示すように、ネストされたコンテナをフラット化された方法で反復処理します。

// Generate some test data
std::vector<std::vector<int>> v(3);
int i(0);
for (auto it(v.begin()); it != v.end(); ++it)
{
    it->push_back(i++);
    it->push_back(i++);
    it->push_back(i++);
    it->push_back(i++);
}

// Flatten the data and print all the elements
for (auto it(flatten(v.begin(), v.end())); it != flatten(v.end()); ++it)
{
    std::cout << *it << ", ";
}
ログイン後にコピー

この実装には次のような特徴があります。十分なテストが行​​われていないため、本番環境に導入する前にさらにテストすることをお勧めします。バグに遭遇した場合は、お気軽に作者に連絡して修正してください。

以上がC でフラット化イテレータを作成してネストされたコンテナを反復処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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