用变量初始化C++的二维数组维数

C++的二维数组是不能用变量初始化的,像下面的代码肯定是编译不通过的:

int i=5;
int j=4;
int a[i][j];
像这样的代码肯定是很多C++像我一样的初学者的困感,如果数组是在编译的阶段确定其内存位置的,而变量不能作为数组的维数.
下面,用一个模板类,完成这种功能
template<class T>
class Array2D{
private:
    T
* pData;
    
int dim1;
    
int dim2;
    
int dim1Index;
    
class Array1D{
    
private:
        
int length;
        T
* start;
    
public:
        Array1D(T
* start,int length):length(length),start(start){}
        T
& operator[](int index){
            
if(index>length){
                
throw out_of_range("数组第二维数越界");
            }
else{
                
return *(start+index);
            }
        }
    };
public:
    Array2D(
int dim1,int dim2){
        
this->dim1=dim1;
        
this->dim2=dim2;
        
int size=dim1*dim2;
        pData
=new T[size];
    }
    Array1D 
operator[](int index){
        
return Array1D(pData+index*dim1,dim2);
    }
    
void print(){
        
for(int i=0;i<dim1;i++){
            
for(int j=0;j<dim2;j++){
                cout
<<*(pData+dim1*i+j)<<" ";
            }
            cout
<<endl;
        }
    }
};
int main(){
    
int index1=2;
    
int index2=2;
    Array2D
<int> test(index1,index2);
    test[
0][0]=1;
    test[
0][1]=2;
    test[
1][0]=3;
    test[
1][1]=4;
    test.print();
}
  用一个模板类实现这个功能,是一个不错的选择,但在实际中,是很少有人这样写的,这是在more effective C++给出的方法,目的是为了说明proxy模式,Array1D是作为一个proxy类存在的。
原文地址:https://www.cnblogs.com/CUCmehp/p/1377318.html