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
Lepaskan: 2024-12-11 11:12:10
asal
288 orang telah melayarinya

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());
    }
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan