zoukankan      html  css  js  c++  java
  • 按列存储的二维数组模版

     C/C++的多维数组是按行、连续存储的。

     任务:用类模板实现操作接口相同、按列存储的、任意
    元素类型的多维数组。

    #include <iostream>
    using namespace std;
    
    template<class T>
    class Array;
    
    template <class T>
    class ArrayTmp
    {
        friend class Array <T>;
        T* tpBody;
        int iRows,iColumns,iCurrentRow;
        ArrayTmp(int iRsz, int iCsz)
        {
            tpBody=new T[iRsz*iCsz];
            iRows=iRsz;
            iColumns=iCsz;
            iCurrentRow=-1;
        }
    public:
        T & operator[](int j)
        {
            return tpBody[iCurrentRow + (j*iRows)];
        }
        void diaplay1()
        {
            for (int i=0;i<iRows*iColumns;i++)
            {
                cout<<tpBody[i]<<" ";
            }
            
        }
    };
    
    template <class T>
    class Array
    {
        ArrayTmp<T> tTmp;
    public:
        ArrayTmp<T>& operator[](int i)
        {
            tTmp.iCurrentRow=i;
            return tTmp;
        }
        Array(int iRsz,int iCsz):tTmp(iRsz,iCsz){}
        void display2()
        {
            tTmp.diaplay1();
        }
    };
    
    void main()
    {
        Array<int> arr(2,3);
        arr[0][0]=1;
        arr[0][1]=2;
        arr[0][2]=3;
        arr[1][0]=4;
        arr[1][1]=5;
        arr[1][2]=6;
        cout<<arr[1][2]<<endl;
        arr.display2();
    
    }

    说明:1.程序中用了2个类型来进行下标i的传递。注意[]是但操作数的运算符。

             2.[]操作符即是取操作符也是存操作符。arr[0][0]=1存,cout<<arr[1][2];是取。

             3.若要实现按行存储的二维数组模版,程序相同,只是相应的i、j互换,此时两个类型间传递的是j.

             4.二维数组内部其实是按一维数组存储的,因按行、按列存储方式不同,对应的一维数组不同,如代码中的tpBody,所以通过display tpBody,便可以清晰的看出存储顺序来。

  • 相关阅读:
    Leetcode第七题——数的反转
    Leetcode第六题——横向遍历ZIGZAG数组
    26 将查询结果插入到一张表中?
    25 表的复制
    24 insert 语句插入数据
    23 创建表
    22 limit(重点中的重点,以后分页查询全靠它了。)
    21 union(可以将查询结果集相加
    20 子查询
    19 连接查询
  • 原文地址:https://www.cnblogs.com/Yogurshine/p/2867853.html
Copyright © 2011-2022 走看看