>백엔드 개발 >C++ >C 11에서 동시 반복을 위한 Python의 Zip 기능을 어떻게 달성할 수 있습니까?

C 11에서 동시 반복을 위한 Python의 Zip 기능을 어떻게 달성할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-11 11:12:10223검색

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

C 11의 순차 반복을 위한 Zip 함수

C 11에 범위 기반 for 루프가 도입되면서 시퀀스에 대한 루핑이 더 간결해집니다. 그러나 여러 시퀀스를 동시에 반복하면 문제가 발생합니다. 이 기사에서는 zip 스타일 기능을 C 11 코드에 통합하기 위한 솔루션을 살펴봅니다.

Python의 zip 기능은 여러 목록을 동시에 반복하여 각 목록의 요소를 쌍으로 묶는 편리한 방법을 제공합니다. 새로운 C 11 기능으로 유사한 동작을 달성할 수 있습니까?

Boost의 Combine 및 Zip Iterator

Boost 1.56.0 이상에서는 Boost::combine 기능을 사용할 수 있습니다. 여러 범위를 단일 튜플 범위로 결합합니다. 각 튜플 요소는 해당 범위의 현재 위치에 있는 값에 해당합니다.

#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는 이 목적을 위해 Boost::zip_iterator도 제공합니다. 이전 Boost 버전에서는 사용자 정의 zip 함수를 정의하여 다양한 튜플을 생성할 수 있습니다.

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

이러한 방법을 사용하면 여러 시퀀스를 동시에 효과적으로 반복하여 C 11 코드에서 zip과 같은 기능을 사용할 수 있습니다. .

위 내용은 C 11에서 동시 반복을 위한 Python의 Zip 기능을 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.