可自定义大小的二维数组和三维数组

二维数组

#include <iostream>
#include<cstring>
using namespace std;


class Array2
{
    public:
    Array2()
    {
        a = NULL;row = 0;col = 0; size = 0;

    }
    Array2(int m,int n)
    {
        row = m; col = n;
        size = row * col;

        a = new int[size];
        for(int i = 0;i < size ;i++)
        a[i] = -1;//数组初始化为-1

    }
    int *  operator [](int m)//或者写两个类  一个用来获取行 另一个获取列
    {

       // cout<<m*col<<endl;
        return &a[m *col];
    }
    int operator ()(int m,int n)
    {   //cout<<"test"<<m<<" "<<n<<" "<<a[m *col +n]<<"test"<<endl;
        return a[ m *col + n];
    }

    void operator = (const Array2 tem)
    {
        row = tem.row; col = tem.col;
        size = tem.size;
        a  = new int[size];
        for(int i = 0 ;i < size ;i++)
        a[i] = tem.a[i];

    }
    ~Array2()
    {
        if(size)delete [] a;
    }
    private: int * a;
             int size;//数组的大小
             int row,col;//数组的行和列

};



int main() {

//    size_t n2 =10;
//    cout<<sizeof(n2)<<sizeof(unsigned int)<<endl;//size_t 相当于 unsigned int  跨平台用的
	Array2 a(3,4);
	int i,j;
	for(  i = 0;i < 3; ++i )
		for(  j = 0; j < 4; j ++ )
			a[i][j] = i * 4 + j;
	for(  i = 0;i < 3; ++i ) {
		for(  j = 0; j < 4; j ++ ) {
			cout << a(i,j) << ",";
		}
		cout << endl;
	}
	cout << "next" << endl;
	Array2 b; 	b = a;
	for(  i = 0;i < 3; ++i ) {
		for(  j = 0; j < 4; j ++ ) {
			cout << b[i][j] << ",";
		}
		cout << endl;
	}
	return 0;
}

三维数组是在二维数组的基础上做的 可以用一个指针指向二维数组


#include <iostream>

using namespace std;


template <class T1>
class CArray3D
{
    template <class T>
    class CArray2D
    {
      public:
      CArray2D(){}
      CArray2D(int y_,int z_):y(y_),z(z_)
      {
         data = new T[y * z];
      }
      T * operator [](int k)
      {
          return &data[k * z];
      }
      void operator = (CArray2D tem)
      {
          y = tem.y;
          z = tem.z;
          data = new T[y * z];
      }
     // ~CArray2D(){delete [] data; cout<<"CArray2D finish!"<<endl;}
      private:
      int y,z;
      T *data;
    };
public:
    CArray3D(int x_,int y_,int z_)
    {
        CArray2D <T1> tem(y_,z_);
        array = new CArray2D <T1> [x_];
        for(int i = 0;i < x_;i++)
            array[i] = tem;
    }
    CArray2D<T1> & operator [](int k)
    {
        return array[k];
    }
    ~CArray3D(){delete [] array;}// cout<<"CArray3D finish!"<<endl;}

    private:
    CArray2D<T1> *array;
};

int main()
{

    CArray3D<int> a(3,4,5);
    int No = 0;
    for( int i = 0; i < 3; ++ i )
        for( int j = 0; j < 4; ++j )
            for( int k = 0; k < 5; ++k )
                a[i][j][k] = No ++;

     for( int i = 0; i < 3; ++ i )
        for( int j = 0; j < 4; ++j )
            for( int k = 0; k < 5; ++k )
                cout << a[i][j][k] << ",";
    return 0;

}


也可以用vector 来定义多维数组

  #include <iostream>
  #include <vector>
  using namespace std;
  int main()
  {
      vector< vector<int> > array(3);
      for(int i=0;i<3;i++)
        array[i].resize(3);//设置数组的大小3X3
         //现在你可以和使用数组一样使用这个vector
      for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
          array[i][j]=(i*j);
      //输出
      for(int i=0;i<3;i++)
      {
         for(int j=0;j<3;j++)
           cout<<array[i][j]<<" ";
         cout<<endl;
       }
     array.resize(5);
     array[3].resize(3);
     array[4].resize(3);
      //现在是5X3的数组了
      for(int i=0;i<5;i++)
         for(int j=0;j<3;j++)
            array[i][j]=(i*j);
      for(int i=0;i<5;i++)
      {
         for(int j=0;j<3;j++)
            cout<<array[i][j]<<" ";
        cout<<endl;
      }
  }
参考

也可以用数据结构里面的

int ** p  和  

int ***p  来分别实现二维和三维数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值