C 11의 범위 기반 for 루프는 코드 가독성과 간결성을 크게 향상시킵니다. 다음과 같이 단순화된 구문을 사용하여 다양한 요소를 반복할 수 있습니다.
for (auto x : Y) {}
그러나 이 구문은 Python의 zip 함수와 같이 여러 동시 범위에 대한 반복으로 직접 확장되지 않습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!