是否有等效enumerate
于 C++ 中 python 的基于范围的循环?我会想象这样的事情。
enumerateLoop (auto counter, auto el, container) {
charges.at(counter) = el[0];
aa.at(counter) = el[1];
}
这可以用模板或宏来完成吗?
我知道我可以使用老式的 for 循环并迭代直到达到container.size()
. 但我很感兴趣如何使用模板或宏来解决这个问题。
编辑
在评论中的提示之后,我使用了 boost 迭代器。我得到了另一个使用 C++14 的工作解决方案。
template <typename... T>
auto zip(const 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);
}
template <typename T>
auto enumerate(const T &container) {
return zip(boost::counting_range(0, static_cast<int>(container.size())),
container);
}