Cree una función que imprima el tamaño de una array multidimensional por dimensiones, es decir:
Ejemplos:
Input : int a[2][3][4]; printDimensions(a); Output : 2x3x4 Input : int b[5][6]; printDimensions(a); Output : 5x6
Para resolver este problema, debemos usar la función de plantilla para calcular el tamaño de la array actual. Luego llamamos a esta función recursivamente hasta la última dimensión. Para la última dimensión, se debe utilizar la función de plantilla anulada de límite. La implementación de la idea:
CPP
// C++ program to print dimensions of a // multidimensional array #include <iostream> template <typename T, size_t N> void printDimensions(const T (&a)[N]) { std::cout << N; } template <typename T, size_t N, size_t M> void printDimensions(const T (&a)[N][M]) { std::cout << N << "x"; printDimensions(a[0]); } int main() { int a[2][3][4]; printDimensions(a); return 0; }
2x3x4
Preste atención al orden de las dos funciones de plantilla. No se compilará si los cambia.
Hay una forma más de obtener los mismos resultados mediante el uso de funciones de plantilla de idioma:
CPP
// C++ 14 program to print dimensions of a // multidimensional array #include <iostream> #include <type_traits> template <typename T> std::enable_if_t<std::rank<T>::value == 1> printDimensions(const T& a) { std::cout << std::extent<T>::value; } template <typename T> std::enable_if_t<std::rank<T>::value != 1> printDimensions(const T& a) { std::cout << std::extent<T>::value << "x"; printDimensions(a[0]); } int main() { int a[2][3][4]; printDimensions(a); return 0; }
2x3x4
Si cree que los nombres de las plantillas son demasiado largos para imprimirlos, no está solo. Hay alias cortos en C++17:
std::extent_v para std::extent::value y std::rank_v para std::rank::value
Publicación traducida automáticamente
Artículo escrito por greenEkatherine y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA