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
Libérer: 2024-11-29 03:19:08
original
631 Les gens l'ont consulté

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
}
Copier après la connexion

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 << ", ";
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal