【发布时间】:2012-05-12 07:39:06
【问题描述】:
这是一个简单的 C++ 中的双容器 zip 函数:
template <typename A, typename B>
std::list<std::pair<A, B> > simple_zip(const std::list<A> & lhs,
const std::list<B> & rhs)
{
std::list<std::pair<A, B> > result;
for (std::pair<typename std::list<A>::const_iterator,
typename std::list<B>::const_iterator> iter
=
std::pair<typename std::list<A>::const_iterator,
typename std::list<B>::const_iterator>(lhs.cbegin(),
rhs.cbegin());
iter.first != lhs.end() && iter.second != rhs.end();
++iter.first, ++iter.second)
{
result.push_back( std::pair<A, B>(*iter.first, *iter.second) );
}
return result;
}
如何将其扩展到具有可变参数模板的任意数量的容器?
我希望general_zip 接受lists 的tuple(每个列表可以包含不同的类型)并返回tuples 的list。
【问题讨论】:
-
那个惊人的-long-for-initialization-statement 可以重写为
auto iter = std::make_pair(lhs.cbegin(), rhs.cbegin())。你的声明太长了。 -
@fontanini 太棒了,非常感谢。
-
@dirkgently 我已经看到了这个问题,但它有点乱,似乎没有一个成功的结论......你还有什么推荐的吗?
标签: c++ iterator c++11 tuples variadic-templates