fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <iterator>
  4. #include <algorithm>
  5.  
  6.  
  7. // function to interleave ranges, you'll see the usage later
  8. template <class InputIterator1, class InputIterator2, class OutputIterator>
  9. OutputIterator interleave(InputIterator1 first1, InputIterator1 last1,
  10. InputIterator2 first2, InputIterator2 last2,
  11. OutputIterator result)
  12. {
  13. while (first1 != last1 || first2 != last2)
  14. {
  15. if (first1==last1) return std::copy(first2,last2,result);
  16. if (first2==last2) return std::copy(first1,last1,result);
  17.  
  18. *result++ = *first1++;
  19. *result++ = *first2++;
  20. }
  21. }
  22.  
  23. int main() // example
  24. {
  25. std::vector<int> v {1, 2, 3, 4, 5, 6, 7};
  26. // fill v with elements
  27. std::vector<int> result; // this is not an "in place solution"
  28.  
  29. interleave(v.begin(), v.end(), v.rbegin(), v.rend(), back_inserter(result));
  30. // result holds the answer - keep that or assign it back to v
  31. std::cout << "v = ";
  32. for (int i : v) std::cout << i << ", ";
  33. std::cout << std::endl;
  34.  
  35. std::cout << "result = ";
  36. for (int i : result) std::cout << i << ", ";
  37. std::cout << std::endl;
  38. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
v = 1, 2, 3, 4, 5, 6, 7, 
result = 1, 7, 2, 6, 3, 5, 4, 4, 5, 3, 6, 2, 7, 1,