如何在C++中打印多维数组的维数

创建一个按维度打印多维数组大小的函数,即: 例如:

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
喜欢就支持一下吧
点赞7 分享