Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencapai Fungsi `zip` Python dengan Pelbagai Julat dalam C 11?

Bagaimanakah Saya Boleh Mencapai Fungsi `zip` Python dengan Pelbagai Julat dalam C 11?

Barbara Streisand
Barbara Streisandasal
2024-12-13 17:18:11474semak imbas

How Can I Achieve Python's `zip` Functionality with Multiple Ranges in C  11?

Fungsi zip jujukan untuk C 11?

Gelung untuk berasaskan julat dalam C 11 menawarkan peningkatan ketara dalam kebolehbacaan dan keringkasan kod. Ia membolehkan anda mengulangi julat elemen menggunakan sintaks yang dipermudahkan, seperti yang dilihat dalam:

for (auto x : Y) {}

Walau bagaimanapun, sintaks ini tidak meluas secara langsung kepada gelung pada berbilang julat serentak, seperti fungsi zip Python.

Penyelesaian Boost

Sebelum C 11, perpustakaan Boost menyediakan dua kaedah untuk meniru Python kefungsian zip:

Boost.Range.Combine:

#include <boost/range/combine.hpp>

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, a)) {
    int x, w;
    double y;
    std::string z;
    boost::tie(x, y, z, w) = tup;
    printf("%d %g %s %d\n", x, y, z.c_str(), w);
}

Boost.Iterator.ZipIterator:

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

std::vector<int> a {4, 5, 6};
double b[] = {7, 8, 9};
std::list<std::string> c {"a", "b", "c"};

for (auto tup : zip(a, b, c, a)) {
    int x, w;
    double y;
    std::string z;
    std::tie(x, y, z, w) = tup;
    printf("%d %g %s %d\n", x, y, z.c_str(), w);
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Fungsi `zip` Python dengan Pelbagai Julat 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