创建一个按维度打印多维数组大小的函数,即: 例如:
null
Input : int a[2][3][4];printDimensions(a);Output :2x3x4Input :int b[5][6];printDimensions(a);Output :5x6
为了解决这个问题,我们应该使用 模板函数 计算当前数组的大小。然后我们递归调用这个函数,直到最后一个维度。对于最后一个尺寸标注,应使用边界替代模板函数。该想法的实施:
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
注意两个模板函数的顺序。如果你切换它们,它就不会编译。 还有一种方法可以通过使用语言模板功能获得相同的结果:
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
如果你认为模板名称太长,无法打印,你并不孤单。C++17中有短别名: std::extent_v表示std::extent::value,std::rank_v表示std::rank::value
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END