#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgoKICAgIC8vIGZ1bmN0aW9uIHRvIGludGVybGVhdmUgcmFuZ2VzLCB5b3UnbGwgc2VlIHRoZSB1c2FnZSBsYXRlcgogICAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3IxLCBjbGFzcyBJbnB1dEl0ZXJhdG9yMiwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+CiAgICAgIE91dHB1dEl0ZXJhdG9yIGludGVybGVhdmUoSW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0ZXJhdG9yMSBsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0SXRlcmF0b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRvcjIgbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRJdGVyYXRvciByZXN1bHQpCiAgICB7CiAgICAgIHdoaWxlIChmaXJzdDEgIT0gbGFzdDEgfHwgZmlyc3QyICE9IGxhc3QyKSAKICAgICAgewogICAgICAgIGlmIChmaXJzdDE9PWxhc3QxKSByZXR1cm4gc3RkOjpjb3B5KGZpcnN0MixsYXN0MixyZXN1bHQpOwogICAgICAgIGlmIChmaXJzdDI9PWxhc3QyKSByZXR1cm4gc3RkOjpjb3B5KGZpcnN0MSxsYXN0MSxyZXN1bHQpOwogICAgCiAgICAgICAgKnJlc3VsdCsrID0gKmZpcnN0MSsrOwogICAgCSpyZXN1bHQrKyA9ICpmaXJzdDIrKzsKICAgICAgfQogICAgfQoKICAgIGludCBtYWluKCkgLy8gZXhhbXBsZQogICAgewogICAgICAgIHN0ZDo6dmVjdG9yPGludD4gdiB7MSwgMiwgMywgNCwgNSwgNiwgN307CiAgICAgICAgLy8gZmlsbCB2IHdpdGggZWxlbWVudHMKICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHJlc3VsdDsgLy8gdGhpcyBpcyBub3QgYW4gImluIHBsYWNlIHNvbHV0aW9uIgoKICAgICAgICBpbnRlcmxlYXZlKHYuYmVnaW4oKSwgdi5lbmQoKSwgdi5yYmVnaW4oKSwgdi5yZW5kKCksIGJhY2tfaW5zZXJ0ZXIocmVzdWx0KSk7CiAgICAgICAgLy8gcmVzdWx0IGhvbGRzIHRoZSBhbnN3ZXIgLSBrZWVwIHRoYXQgb3IgYXNzaWduIGl0IGJhY2sgdG8gdgogICAgICAgIHN0ZDo6Y291dCA8PCAidiA9ICI7CiAgICAgICAgZm9yIChpbnQgaSA6IHYpIHN0ZDo6Y291dCA8PCBpIDw8ICIsICI7CiAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAKICAgICAgICBzdGQ6OmNvdXQgPDwgInJlc3VsdCA9ICI7CiAgICAgICAgZm9yIChpbnQgaSA6IHJlc3VsdCkgc3RkOjpjb3V0IDw8IGkgPDwgIiwgIjsKICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgfQ==
v = 1, 2, 3, 4, 5, 6, 7,
result = 1, 7, 2, 6, 3, 5, 4, 4, 5, 3, 6, 2, 7, 1,