Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Mencapai Fungsi Zip Python untuk Lelaran Serentak dalam C 11?

Bagaimanakah Kami Boleh Mencapai Fungsi Zip Python untuk Lelaran Serentak dalam C 11?

Linda Hamilton
Linda Hamiltonasal
2024-12-11 11:12:10226semak imbas

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

Fungsi Zip untuk Lelaran Berjujukan dalam C 11

Dengan pengenalan untuk gelung berasaskan julat dalam C 11, gelung ke atas jujukan mempunyai menjadi lebih ringkas. Walau bagaimanapun, gelung pada berbilang jujukan secara serentak menimbulkan cabaran. Artikel ini meneroka penyelesaian untuk memasukkan kefungsian gaya zip ke dalam kod C 11.

Fungsi zip Python menawarkan cara yang mudah untuk mengulangi berbilang senarai secara serentak, menggandingkan elemen daripada setiap senarai. Bolehkah kita mencapai gelagat yang serupa dengan ciri C 11 baharu?

Boost's Combine and Zip Iterator

Dalam Boost 1.56.0 dan seterusnya, fungsi boost::combine tersedia untuk menggabungkan berbilang julat ke dalam satu julat tupel. Setiap elemen tuple sepadan dengan nilai pada kedudukan semasa dalam julat masing-masing.

#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());
    }
}

Boost juga menyediakan boost::zip_iterator untuk tujuan ini. Dalam versi Boost yang lebih awal, fungsi zip tersuai boleh ditakrifkan untuk mencipta julat tuple.

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

Menggunakan kaedah ini, kami boleh mengulangi berbilang jujukan secara serentak, mendayakan fungsi seperti zip dalam kod C 11 .

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mencapai Fungsi Zip Python untuk Lelaran Serentak dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn