zoukankan      html  css  js  c++  java
  • 用变量初始化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类存在的。
  • 相关阅读:
    ios特性访问器方法(setter和getter)
    JavaScript文本收缩展开 showdetail
    MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类) Ver 1.65
    拖动层 拖动div 封装js 貌似不兼容FF,郁闷
    cookie中存储json
    页面get post等查看
    瑞星杀毒软件2010年1月11日8:29:28 【免费】
    div两侧的boder断开 消失 奇怪
    用来武装Firebug的十四款Firefox插件
    在内容页中调用母版页控件、响应控件消息(用户控件、服务器控件有所不同)
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1377318.html
Copyright © 2011-2022 走看看