Maison >développement back-end >C++ >Comment puis-je simuler la fonction Zip de Python à l'aide de C 11 et au-delà ?
Séquences de compression en C 11
Avec l'introduction de boucles for basées sur des plages en C 11, le code est devenu plus concis et lisible . Cependant, la question se pose de savoir s'il peut être utilisé pour simuler la fonction zip de Python, qui parcourt plusieurs collections simultanément.
Boost Zip Functionality
Bien que la fonctionnalité basée sur la plage pour -loop ne prend pas directement en charge les boucles simultanées, la bibliothèque Boost fournit un zip_iterator. Il permet aux utilisateurs de définir une plage qui parcourt les éléments de plusieurs conteneurs en parallèle.
Utilisation de Boost Zip_iterator
L'extrait de code suivant montre comment utiliser boost : zip_iterator :
#include <boost/iterator/zip_iterator.hpp> #include <vector> int main() { std::vector<int> a {1, 2, 3}; std::vector<std::string> b {"one", "two", "three"}; for (auto tup : boost::make_zip_iterator(boost::make_tuple(a.begin(), b.begin()))) { int x; std::string y; boost::tie(x, y) = tup; std::cout << x << " " << y << std::endl; } }
Ce code sera sortie :
1 one 2 two 3 three
Avertissement :
Il est important de noter que la longueur de tous les conteneurs d'entrée doit être égale. Sinon, un comportement non défini peut se produire.
Alternatives
Outre Boost, il existe des bibliothèques alternatives qui offrent des fonctionnalités zip pour C . Par exemple, la bibliothèque Ranges fournit une vue zip_view qui peut être utilisée avec des boucles for basées sur des plages :
#include <ranges> int main() { std::vector<int> a {1, 2, 3}; std::vector<std::string> b {"one", "two", "three"}; for (auto [x, y] : std::ranges::zip_view(a, b)) { std::cout << x << " " << y << std::endl; } }
L'utilisation de Boost ou d'autres bibliothèques dépend des exigences spécifiques et de la configuration du projet.
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!