您的位置:首页 > 其它

读boost::multi_array有感,多维数组实现(非类型模板,偏特化)

2015-01-21 12:07 513 查看
开发环境:

VS2002(VC7)

本文做如下简化:

1,假定所有维元素都是5。

2,不考虑const的[]。

3,由于只是熟悉原理,不考虑各种异常情况。

问题一,请实现一个一维整形数组,只需重载[]。

问题二,请实现一个二维整形数组,只需重载[]。

源码如下:

class CIntArray1

{

public:    

    int& operator[](int index)

    {

        return m_pData[index];

    }

protected:

    int m_pData[5];

};

class CIntArray2

{

public:

    int* operator[](int index)

    {

        return m_pData[index];

    }

protected:

    int m_pData[5][5] ;

};

测试程序:

    CIntArray1 arr1;

    arr1[1] = -1;

    int i1 = arr1[1];

    CIntArray2 arr2;

    arr2[1][1] = -2;

    int i2 = arr2[1][1];

三,请实现一个N(2<=n<=10)维整形数组,只需重载[]

template<int iWeiShu>

class CIntArray

{

public:

    CIntArray<iWeiShu-1>& operator[](int index)

    {

        return m_pData[index];

    }

protected:

    CIntArray<iWeiShu-1> m_pData[5];

};

template<>

class CIntArray<1>

{

public:

    int& operator[](int index)

    {

        return m_pData[index];

    }

protected:

    int m_pData[5];

};

测试程序

CIntArray<1> a1;

    a1[1] = 4;

    int x1 = a1[1];

    CIntArray<2> a2;

    a2[1][1] = 5;

    int x2 = a2[1][1];

    CIntArray<3> a3;

    a3[0][0][0] =9;

    int x3 = a3[0][0][0];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: