二维数组
#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 来分别实现二维和三维数组