#include <iostream>
#include <array>
template<unsigned...>struct indexes{typedef indexes type;};
template<unsigned Max, unsigned...Is> struct make_indexes:make_indexes<Max-1, Max-1, Is...>{};
template<unsigned...Is> struct make_indexes<0, Is...>:indexes<Is...>{};
template<unsigned Max> using make_indexes_t = typename make_indexes<Max>::type;
template<typename T, unsigned N, unsigned M, unsigned... Is>
std::array<T*, M> as_array_of_pointers( indexes<Is...>, T(&arr)[M][N] ) {
return { arr[Is]... };
};
template<typename T, unsigned N, unsigned M>
std::array<T*, M> as_array_of_pointers( T(&arr)[M][N] ) {
return as_array_of_pointers( make_indexes_t<M>{}, arr );
}
int main() {
int test[2][3] = {1,2,3,4,5,6};
for (auto&& level1:test) {
for (auto&& level2:level1) {
std::cout << level2 << ",";
}
std::cout << "\n";
}
for (auto&& level1:as_array_of_pointers(test)) {
std::cout << level1[0] << ",";
std::cout << level1[1] << ",";
std::cout << level1[2] << "\n";
}
return 0;
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CgogICAgdGVtcGxhdGU8dW5zaWduZWQuLi4+c3RydWN0IGluZGV4ZXN7dHlwZWRlZiBpbmRleGVzIHR5cGU7fTsKICAgIHRlbXBsYXRlPHVuc2lnbmVkIE1heCwgdW5zaWduZWQuLi5Jcz4gc3RydWN0IG1ha2VfaW5kZXhlczptYWtlX2luZGV4ZXM8TWF4LTEsIE1heC0xLCBJcy4uLj57fTsKICAgIHRlbXBsYXRlPHVuc2lnbmVkLi4uSXM+IHN0cnVjdCBtYWtlX2luZGV4ZXM8MCwgSXMuLi4+OmluZGV4ZXM8SXMuLi4+e307CiAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBNYXg+IHVzaW5nIG1ha2VfaW5kZXhlc190ID0gdHlwZW5hbWUgbWFrZV9pbmRleGVzPE1heD46OnR5cGU7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgTiwgdW5zaWduZWQgTSwgdW5zaWduZWQuLi4gSXM+CiAgICBzdGQ6OmFycmF5PFQqLCBNPiBhc19hcnJheV9vZl9wb2ludGVycyggaW5kZXhlczxJcy4uLj4sIFQoJmFycilbTV1bTl0gKSB7CiAgICAgIHJldHVybiB7IGFycltJc10uLi4gfTsKICAgIH07CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBOLCB1bnNpZ25lZCBNPgogICAgc3RkOjphcnJheTxUKiwgTT4gYXNfYXJyYXlfb2ZfcG9pbnRlcnMoIFQoJmFycilbTV1bTl0gKSB7CiAgICAgIHJldHVybiBhc19hcnJheV9vZl9wb2ludGVycyggbWFrZV9pbmRleGVzX3Q8TT57fSwgYXJyICk7CiAgICB9CgppbnQgbWFpbigpIHsKCWludCB0ZXN0WzJdWzNdID0gezEsMiwzLDQsNSw2fTsKCWZvciAoYXV0byYmIGxldmVsMTp0ZXN0KSB7CgkJZm9yIChhdXRvJiYgbGV2ZWwyOmxldmVsMSkgewoJCQlzdGQ6OmNvdXQgPDwgbGV2ZWwyIDw8ICIsIjsKCQl9CgkJc3RkOjpjb3V0IDw8ICJcbiI7Cgl9Cglmb3IgKGF1dG8mJiBsZXZlbDE6YXNfYXJyYXlfb2ZfcG9pbnRlcnModGVzdCkpIHsKCQlzdGQ6OmNvdXQgPDwgbGV2ZWwxWzBdIDw8ICIsIjsKCQlzdGQ6OmNvdXQgPDwgbGV2ZWwxWzFdIDw8ICIsIjsKCQlzdGQ6OmNvdXQgPDwgbGV2ZWwxWzJdIDw8ICJcbiI7Cgl9CglyZXR1cm4gMDsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJldHVybiAwOwp9