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 サイトの他の関連記事を参照してください。