C 11에서 동시 루프를 시뮬레이션하기 위한 Zip 함수
C 11에 범위 기반 for 루프가 도입되어 요소에 대한 루프가 단순화되었습니다. 컨테이너. 그러나 여러 시퀀스에 대한 반복을 동시에 수행할 수 있는 Python의 zip 기능을 복제하는 것이 가능한지에 대한 의문이 제기됩니다.
해결책
이를 달성하기 위한 여러 접근 방식이 있습니다. 이는 Boost 라이브러리를 사용하여 수행됩니다.
접근 방법 1: Boost Combine(Boost 1.56.0 및 이후)
Boost 1.56.0에서는 Boost::combine 기능이 도입되었습니다. 다양한 유형의 여러 컨테이너를 단일 범위로 결합할 수 있습니다.
#include <boost/range/combine.hpp> int main() { std::vector<int> a = {1, 2, 3}; std::vector<char> b = {'a', 'b', 'c'}; for (const auto& [x, y] : boost::combine(a, b)) { std::cout << x << " " << y << std::endl; } }
이 코드는 다음을 출력합니다.
1 a 2 b 3 c
접근 방식 2: Boost Zip Iterator(이전 Boost 버전)
Boost 1.56.0 이전에는 Boost::zip_iterator 및 Boost::range 라이브러리를 사용하여 사용자 정의 zip 범위를 구현할 수 있습니다:
#include <boost/iterator/zip_iterator.hpp> #include <boost/range.hpp> template <typename... T> auto zip(const T&&... 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); }
사용법은 동일하게 유지됩니다:
int main() { std::vector<int> a = {1, 2, 3}; std::vector<char> b = {'a', 'b', 'c'}; for (const auto& [x, y] : zip(a, b)) { std::cout << x << " " << y << std::endl; } }
위 내용은 Boost를 사용하여 C 11에서 동시 루프를 위한 Python의 Zip 기능을 어떻게 시뮬레이션할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!