fork download
  1. #include <iostream>
  2. #include <array>
  3.  
  4. template<unsigned...>struct indexes{typedef indexes type;};
  5. template<unsigned Max, unsigned...Is> struct make_indexes:make_indexes<Max-1, Max-1, Is...>{};
  6. template<unsigned...Is> struct make_indexes<0, Is...>:indexes<Is...>{};
  7. template<unsigned Max> using make_indexes_t = typename make_indexes<Max>::type;
  8.  
  9. template<typename T, unsigned N, unsigned M, unsigned... Is>
  10. std::array<T*, M> as_array_of_pointers( indexes<Is...>, T(&arr)[M][N] ) {
  11. return { arr[Is]... };
  12. };
  13. template<typename T, unsigned N, unsigned M>
  14. std::array<T*, M> as_array_of_pointers( T(&arr)[M][N] ) {
  15. return as_array_of_pointers( make_indexes_t<M>{}, arr );
  16. }
  17.  
  18. int main() {
  19. int test[2][3] = {1,2,3,4,5,6};
  20. for (auto&& level1:test) {
  21. for (auto&& level2:level1) {
  22. std::cout << level2 << ",";
  23. }
  24. std::cout << "\n";
  25. }
  26. for (auto&& level1:as_array_of_pointers(test)) {
  27. std::cout << level1[0] << ",";
  28. std::cout << level1[1] << ",";
  29. std::cout << level1[2] << "\n";
  30. }
  31. return 0;
  32. // your code goes here
  33. return 0;
  34. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
1,2,3,
4,5,6,
1,2,3
4,5,6