• 用变量初始化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类存在的。
  • 相关阅读:
    homework2
    一件关于Bug的小事
    软件测试作业三:有关控制流图、覆盖内容
    用CSS改变select框的样式
    lab1--ideal + junit
    软件测试作业二
    记一次曾经项目中遇到的错误
    02组_现代软件工程_第04次作业——利用4象限原理分析自身CanTool项目的构成
    02组_现代软件工程_第03次作业——对于自身评价(原有水平以及长远目标分析总结)
    02组_现代软件工程_第02次作业——初谈GitHub使用详解以及设计
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1377318.html
Copyright © 2020-2023  润新知