我很高兴在C++11中发现我们可以用"auto“分配多个维度,但是我得到了定义"auto a=new float1030”和“float a11030”的奇怪的维度值。请帮助检查和任何可能的解决方案。
=============a.cpp =========================
#include <stdio.h>
#include <string.h>
#include <iostream>
template<class T>
size_t size(T const & a ) { return sizeof a / sizeof (a[0]);}
int main(){
auto a=new float[10][20][30];
float a1[10][20][30];
std::cout<<size(a)<<" "<<size(a[0])<<" "<<size(a[0][0])<<"\n";
std::cout<<size(a1)<<" "<<size(a1[0])<<" "<<size(a1[0][0])<<"\n";
delete[] a;
}==========result========================
XUs mini:桌面徐$ g++ -std=c++11 a.cpp -o a XUs迷你:桌面徐$a 0 20 30 10 - 20 30
发布于 2015-01-16 12:38:23
您可以使用模板执行如下操作:
#include <iostream>
template <typename T, size_t c0, size_t c1, size_t c2>
static size_t countof_0(const T (&arr)[c0][c1][c2]) {
return c0;
}
template <typename T, size_t c0, size_t c1, size_t c2>
static size_t countof_1(const T (&arr)[c0][c1][c2]) {
return c1;
}
template <typename T, size_t c0, size_t c1, size_t c2>
static size_t countof_2(const T (&arr)[c0][c1][c2]) {
return c2;
}
int main() {
double my_3d_array[21][11][32];
std::cout << countof_0(my_3d_array) << "\n";
std::cout << countof_1(my_3d_array) << "\n";
std::cout << countof_2(my_3d_array) << "\n";
}如果你能使函数成为常数,那么你应该。
发布于 2015-01-16 19:26:15
下面是基于Chiris以上想法的代码,到5维,虽然很好:
#include <stdio.h>
#include <string.h>
//-----------------------------------------------------------------
//Get Dimension from 5D array
//-----------------------------------------------------------------
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3,size_t c4>
static size_t size1(const T (&arr)[c0][c1][c2][c3][c4]) {
return c0;
}
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3,size_t c4>
static size_t size2(const T (&arr)[c0][c1][c2][c3][c4]) {
return c1;
}
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3,size_t c4>
static size_t size3(const T (&arr)[c0][c1][c2][c3][c4]) {
return c2;
}
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3,size_t c4>
static size_t size4(const T (&arr)[c0][c1][c2][c3][c4]) {
return c3;
}
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3,size_t c4>
static size_t size5(const T (&arr)[c0][c1][c2][c3][c4]) {
return c4;
}
//-----------------------------------------------------------------
//Get Dimension from 4D array
//-----------------------------------------------------------------
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3>
static size_t size1(const T (&arr)[c0][c1][c2][c3]) {
return c0;
}
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3>
static size_t size2(const T (&arr)[c0][c1][c2][c3]) {
return c1;
}
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3>
static size_t size3(const T (&arr)[c0][c1][c2][c3]) {
return c2;
}
template <typename T, size_t c0, size_t c1, size_t c2,size_t c3>
static size_t size4(const T (&arr)[c0][c1][c2][c3]) {
return c3;
}
//-----------------------------------------------------------------
//Get Dimension from 3D array
//-----------------------------------------------------------------
template <typename T, size_t c0, size_t c1, size_t c2>
static size_t size1(const T (&arr)[c0][c1][c2]) {
return c0;
}
template <typename T, size_t c0, size_t c1, size_t c2>
static size_t size2(const T (&arr)[c0][c1][c2]) {
return c1;
}
template <typename T, size_t c0, size_t c1, size_t c2>
static size_t size3(const T (&arr)[c0][c1][c2]) {
return c2;
}
//-----------------------------------------------------------------
//Get Dimension from 2D array
//-----------------------------------------------------------------
template <typename T, size_t c0, size_t c1>
static size_t size1(const T (&arr)[c0][c1]) {
return c0;
}
template <typename T, size_t c0, size_t c1>
static size_t size2(const T (&arr)[c0][c1] ) {
return c1;
}
//-----------------------------------------------------------------
//Get Dimension from 1D array
//-----------------------------------------------------------------
template <typename T, size_t c0>
static size_t size1(const T (&arr)[c0]) {
return c0;
}
/*
int main() {
float my_3d_array[11][22][33][44] ;
cout << size1(my_3d_array) << "\n";
cout << size2(my_3d_array) << "\n";
cout << size3(my_3d_array) << "\n";
cout << size4(my_3d_array) << "\n";
}*/https://stackoverflow.com/questions/27983760
复制相似问题