首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得三维数组的尺寸?

如何获得三维数组的尺寸?
EN

Stack Overflow用户
提问于 2015-01-16 12:16:37
回答 2查看 269关注 0票数 2

我很高兴在C++11中发现我们可以用"auto“分配多个维度,但是我得到了定义"auto a=new float1030”和“float a11030”的奇怪的维度值。请帮助检查和任何可能的解决方案。

=============a.cpp =========================

代码语言:javascript
复制
#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

EN

回答 2

Stack Overflow用户

发布于 2015-01-16 12:38:23

您可以使用模板执行如下操作:

代码语言:javascript
复制
#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";
}

如果你能使函数成为常数,那么你应该。

票数 2
EN

Stack Overflow用户

发布于 2015-01-16 19:26:15

下面是基于Chiris以上想法的代码,到5维,虽然很好:

代码语言:javascript
复制
        #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";    
        }*/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27983760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档