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 중국어 웹사이트의 기타 관련 기사를 참조하세요!