Điều này sẽ làm những gì bạn muốn. Nó hoạt động cho bất kỳ phạm vi nào trái ngược với chỉ vector
.
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ạn gọi nó như thế này.
std::vector<int> x;
std::vector<double> y;
auto xy = zip(x.begin(), x.end(), y.begin(), y.end());
Bạn có thể try it out here.
Có thể sửa đổi zip
để sử dụng các mẫu có vectơ, để bạn có thể nén bất kỳ số lượng dải ô nào lại với nhau.
Để tiếp tục khớp với tiêu đề <algorithm>
, bạn có thể trả lại void
và thay vào đó hãy dùng trình lặp đầu ra để ghi kết quả đầu ra.
Nguồn
2013-06-17 21:54:18
Trong ví dụ của bạn không nên các vectơ có cùng độ dài – aaronman
@aaronman no, anh ấy cắt ngắn thành –
không phải là [this] (http://stackoverflow.com/questions/6631782/implementing-a- variadic-zip-chức năng-với-const-chính xác) gần như chính xác những gì bạn đang tìm kiếm? – mfontanini