İstediğinizi yapmalı. Sadece vector
'un aksine herhangi bir aralıkta çalışır.
template <typename Iterator0, typename Iterator1>
std::vector<std::tuple<
typename Iterator0::value_type,
typename Iterator1::value_type>>
zip(
Iterator0 begin0, Iterator0 end0,
Iterator1 begin1, Iterator1 end1)
{
std::vector<std::tuple<
typename Iterator0::value_type,
typename Iterator1::value_type>> result;
while (begin0 != end0 && begin1 != end1)
{
result.emplace_back(*begin0, *begin1);
++begin0;
++begin1;
}
return result;
}
Böyle diyorsunuz.
std::vector<int> x;
std::vector<double> y;
auto xy = zip(x.begin(), x.end(), y.begin(), y.end());
try it out here.
Değişken şablonlar kullanmak için zip
'u değiştirmek muhtemelen olasıdır, böylece aralıkların herhangi birisini bir araya getirebilirsiniz.
<algorithm>
üstbilgisini daha fazla eşleştirmek için void
döndürebilir ve bunun yerine çıkışın yazılacağı bir çıktı yineleyici alın.
Örneğinizde vektörler aynı uzunlukta olmamalıdır – aaronman
@aaronman no, en kısa sürede kesmeyi belirtir –
Bu değil mi (http://stackoverflow.com/questions/6631782/implementing-a- variadic-zip-function-with-const-doğruluk) tam olarak aradığınız şey nedir? – mfontanini