Maison > développement back-end > C++ > Comment pouvons-nous obtenir la fonctionnalité Zip de Python pour une itération simultanée en C 11 ?

Comment pouvons-nous obtenir la fonctionnalité Zip de Python pour une itération simultanée en C 11 ?

Linda Hamilton
Libérer: 2024-12-11 11:12:10
original
288 Les gens l'ont consulté

How Can We Achieve Python's Zip Functionality for Simultaneous Iteration in C  11?

Fonction Zip pour l'itération séquentielle en C 11

Avec l'introduction de boucles for basées sur une plage en C 11, le bouclage sur des séquences a devenir plus concis. Cependant, parcourir plusieurs séquences simultanément pose un défi. Cet article explore des solutions pour intégrer des fonctionnalités de style zip dans les codes C 11.

La fonction zip de Python offre un moyen pratique de parcourir plusieurs listes simultanément, en associant les éléments de chaque liste. Pouvons-nous obtenir un comportement similaire avec les nouvelles fonctionnalités de C 11 ?

Itérateurs Combine et Zip de Boost

À partir de Boost 1.56.0, la fonction boost::combine est disponible pour combiner plusieurs plages en une seule plage de tuples. Chaque élément de tuple correspond à la valeur à la position actuelle dans les plages respectives.

#include <boost/range/combine.hpp>
#include <vector>
#include <list>

int main() {
    std::vector<int> a {4, 5, 6};
    double b[] = {7, 8, 9};
    std::list<std::string> c {"a", "b", "c"};
    for (auto tup : boost::combine(a, b, c)) {
        int x;
        double y;
        std::string z;
        boost::tie(x, y, z) = tup;
        printf("%d %g %s\n", x, y, z.c_str());
    }
}
Copier après la connexion

Boost fournit également boost::zip_iterator à cet effet. Dans les versions antérieures de Boost, une fonction zip personnalisée peut être définie pour créer une gamme de tuples.

#include <boost/iterator/zip_iterator.hpp>
#include <boost/range.hpp>

template <typename... T>
auto zip(T&&... containers) -> boost::iterator_range<boost::zip_iterator<decltype(boost::make_tuple(std::begin(containers)...))>>
{
    auto zip_begin = boost::make_zip_iterator(boost::make_tuple(std::begin(containers)...));
    auto zip_end = boost::make_zip_iterator(boost::make_tuple(std::end(containers)...));
    return boost::make_iterator_range(zip_begin, zip_end);
}
Copier après la connexion

En utilisant ces méthodes, nous pouvons efficacement parcourir plusieurs séquences simultanément, permettant ainsi une fonctionnalité de type zip dans les codes C 11. .

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