> 백엔드 개발 > C++ > C 11에서 다중 범위로 Python의 `zip` 기능을 어떻게 얻을 수 있습니까?

C 11에서 다중 범위로 Python의 `zip` 기능을 어떻게 얻을 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-13 17:18:11
원래의
485명이 탐색했습니다.

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

C 11의 Sequence-zip 기능?

C 11의 범위 기반 for 루프는 코드 가독성과 간결성을 크게 향상시킵니다. 다음과 같이 단순화된 구문을 사용하여 다양한 요소를 반복할 수 있습니다.

for (auto x : Y) {}
로그인 후 복사

그러나 이 구문은 Python의 zip 함수와 같이 여러 동시 범위에 대한 반복으로 직접 확장되지 않습니다.

Boost 솔루션

C 11 이전에는 Boost 라이브러리가 Python의 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);
}
로그인 후 복사

위 내용은 C 11에서 다중 범위로 Python의 `zip` 기능을 어떻게 얻을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿