Ecco una semplice funzione di cerniera a due container in C++:C++ zip modelli variadic
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;
}
Come dovrei estendere questo ad un numero arbitrario di contenitori con i modelli variadic?
mi piacerebbe general_zip
ad accettare un tuple
di list
s (ogni lista può contenere un tipo diverso) e restituire un list
di tuple
s.
Possibili DUP (che mi è piaciuto comunque!): http://stackoverflow.com/questions/6631782/implementing-a-variadic-zip -function-with-const-correctness – dirkgently
Quella frase incredibilmente lunga per l'inizializzazione potrebbe essere riscritta come 'auto iter = std :: make_pair (lhs.cbegin(), rhs.cbegin())'. La tua dichiarazione è a lungo waaaaay. – mfontanini
@fontanini Fantastico, grazie mille. – user