>백엔드 개발 >C++ >C 11 이상을 사용하여 Python의 Zip 기능을 어떻게 시뮬레이션할 수 있습니까?

C 11 이상을 사용하여 Python의 Zip 기능을 어떻게 시뮬레이션할 수 있습니까?

DDD
DDD원래의
2024-12-08 16:13:14394검색

How Can I Simulate Python's Zip Function Using C  11 and Beyond?

C 11의 압축 시퀀스

C 11에 범위 기반 for 루프가 도입되면서 코드가 더욱 간결해지고 가독성이 높아졌습니다. . 그러나 여러 컬렉션을 동시에 반복하는 Python의 zip 기능을 시뮬레이션하는 데 사용할 수 있는지 의문이 듭니다.

Boost Zip 기능

-loop는 동시 루프를 직접 지원하지 않으며 Boost 라이브러리는 zip_iterator를 제공합니다. 이를 통해 사용자는 여러 컨테이너의 요소를 병렬로 반복하는 범위를 정의할 수 있습니다.

Boost Zip_iterator 사용

다음 코드 조각은 Boost 사용 방법을 보여줍니다. zip_iterator:

#include <boost/iterator/zip_iterator.hpp>
#include <vector>

int main() {
    std::vector<int> a {1, 2, 3};
    std::vector<std::string> b {"one", "two", "three"};

    for (auto tup : boost::make_zip_iterator(boost::make_tuple(a.begin(), b.begin()))) {
        int x;
        std::string y;
        boost::tie(x, y) = tup;
        std::cout << x << " " << y << std::endl;
    }
}

이 코드는 출력:

1 one
2 two
3 three

경고:

모든 입력 컨테이너의 길이가 동일해야 한다는 점에 유의하는 것이 중요합니다. 그렇지 않으면 정의되지 않은 동작이 발생할 수 있습니다.

대안

Boost 외에도 C용 zip 기능을 제공하는 대체 라이브러리가 있습니다. 예를 들어 Ranges 라이브러리는 범위 기반 for 루프와 함께 사용할 수 있는 zip_view를 제공합니다.

#include <ranges>

int main() {
    std::vector<int> a {1, 2, 3};
    std::vector<std::string> b {"one", "two", "three"};

    for (auto [x, y] : std::ranges::zip_view(a, b)) {
        std::cout << x << " " << y << std::endl;
    }
}

Boost를 사용할지 아니면 다른 라이브러리를 사용할지는 특정 요구 사항과 프로젝트 설정에 따라 다릅니다.

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

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