#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>


    // function to interleave ranges, you'll see the usage later
    template <class InputIterator1, class InputIterator2, class OutputIterator>
      OutputIterator interleave(InputIterator1 first1, InputIterator1 last1,
                            InputIterator2 first2, InputIterator2 last2,
                            OutputIterator result)
    {
      while (first1 != last1 || first2 != last2) 
      {
        if (first1==last1) return std::copy(first2,last2,result);
        if (first2==last2) return std::copy(first1,last1,result);
    
        *result++ = *first1++;
    	*result++ = *first2++;
      }
    }

    int main() // example
    {
        std::vector<int> v {1, 2, 3, 4, 5, 6, 7};
        // fill v with elements
        std::vector<int> result; // this is not an "in place solution"

        interleave(v.begin(), v.end(), v.rbegin(), v.rend(), back_inserter(result));
        // result holds the answer - keep that or assign it back to v
        std::cout << "v = ";
        for (int i : v) std::cout << i << ", ";
        std::cout << std::endl;
        
        std::cout << "result = ";
        for (int i : result) std::cout << i << ", ";
        std::cout << std::endl;
    }