Maison >développement back-end >C++ >Comment puis-je créer un itérateur d'aplatissement en C pour itérer sur des conteneurs imbriqués ?

Comment puis-je créer un itérateur d'aplatissement en C pour itérer sur des conteneurs imbriqués ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-29 03:19:08696parcourir

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

Aplatissement des itérateurs en C

Considérez un scénario dans lequel vous avez un conteneur de conteneurs, tel qu'un vecteur> , et vous souhaitez parcourir les éléments de manière aplatie, comme s'il s'agissait d'une seule séquence. C'est là que le concept d'itérateurs d'aplatissement entre en jeu.

En l'absence d'implémentations d'itérateurs d'aplatissement existantes dans les principales bibliothèques, nous présentons ci-dessous une implémentation de base :

#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
}

Cette implémentation vous permet pour parcourir les conteneurs imbriqués de manière aplatie, comme le démontre l'exemple suivant :

// 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 << ", ";
}

Cette implémentation n'a pas été testée de manière approfondie, et des tests supplémentaires sont recommandés avant de le mettre en production. Si vous rencontrez des bugs, n'hésitez pas à contacter l'auteur pour les corrections.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn