Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <vector>
- #include <iomanip>
- #include <functional>
- #include <iterator>
- template <typename Iterator>
- void advance_all (Iterator & iterator) {
- ++iterator;
- }
- template <typename Iterator, typename ... Iterators>
- void advance_all (Iterator & iterator, Iterators& ... iterators) {
- ++iterator;
- advance_all(iterators...);
- }
- template <typename Function, typename Iterator, typename ... Iterators>
- Function zip (Function func, Iterator begin, Iterator end, Iterators ... iterators)
- {
- for(;begin != end; ++begin, advance_all(iterators...))
- func(*begin, *(iterators)... );
- return func;
- }
- int main()
- {
- auto println = [](const char *message) { std::cout << "\n" << message << '\n'; };
- auto lambda_echo = [](int i) { std::cout << std::setw(3) << i; };
- std::vector<int> col{ 23, 23, 37, 42, 23, 23, 37 };
- std::vector<bool> another_col{ false, true, false, false, false, true, true };
- std::vector<double> yet_another_col{ 68.5, 23.234, 68.1, 6.2456, 10.0, 11.112, 98.234 };
- auto print_func = [](auto i, auto j, auto k) {
- std::cout << "element: " << i << " " << j << " " << k << std::endl;
- };
- zip(print_func, col.begin(),col.end(),another_col.begin(), yet_another_col.begin());
- /*
- element: 23 0 68.5
- element: 23 1 23.234
- element: 37 0 68.1
- element: 42 0 6.2456
- element: 23 0 10
- element: 23 1 11.112
- element: 37 1 98.234
- */
- return 0;
- }
Add Comment
Please, Sign In to add comment