zoukankan      html  css  js  c++  java
  • 数据结构算法应用C++语言描述——(1)C++基础知识

    一、二维数组

    (1)二维数组的列是固定时,行未知时使用动态分配

    当一个二维数组每一维的大小在编译时都是已知时,可以采用类似于创建一维数组的语法
    来创建二维数组。例如,一个类型为char的7×5数组可用如下语法来定义:
    char c[7][5];
    如果在编译时至少有一维是未知的,必须在运行时使用操作符new来创建该数组。一个二
    维字符型数组,假定在编译时已知其列数为5,可采用如下语法来分配存储空间:

    #include<exception>
    #include<iostream>
    using namespace std;
    
    void main()
    {
    	int n=10;
    	char (*c)[5];               //c为一指向char[5] 数组类型的指针
    	try { 
    		c = new char [n][5];     
    	}catch (bad_alloc) {         //仅当new失败时才会进入
    		cerr << "Out of Memory" << endl;
    		exit (1);
    	}
    }

    (2)动态创建二维数组,删除动态创建的二维数组,修改动态创建的一维数组和二维数组的大小

    #ifndef make2DArray
    #define make2DArray
    
    #include<exception>
    #include<iostream>
    using namespace std;
    
    /*
    动态创建二维数组
    */
    template<class T> 
    bool Make2DArray(T** &inputArray,int rows,int cols){ //注意此处是一个T**二重指针的引用,否则会发生形参复制,创建的二维数组不可用
    	try{
    		inputArray=new T*[rows];   //创建一个T*类型的数组,该数组含有rows个元素([]操作符的优先级高于*)
    		for(int i=0;i<rows;i++){
    			inputArray[i]=new T[cols];
    		}
    		return true;
    	}catch(bad_alloc){
    		return false;
    	}
    }
    
    /*
    删除动态创建的二维数组
    */
    template <class T>
    void Delete2DArray(T** &inputArray,int rows){
    	for(int i=0;i<rows;i++){
    		delete[] inputArray[i];          //数组中的每个元素都相当于一个指针(还是一个数组)
    	}
    	delete [] inputArray;
    
    }
    
    /*
    改变动态创建的一维数组的大小
    */
    template<class T>
    bool ChangeSize1D(T* &srcArray,int srcSize,int dstSize)
    {
    	try{
    		T *dstArr=new T[dstSize];
    		
    		//实现对重新分配的数组元素的初始化
    		for(int i=0;i<dstSize;i++){
    			if(srcSize>dstSize){   //减小数组的容量
    				dstArr[i]=srcArray[i];
    			}else{                //增加数组的容量
    				if(i<srcSize){
    					dstArr[i]=srcArray[i];
    				}else{
    					dstArr[i]=T();  //使用T默认的构造函数进行初始化
    				}
    			}
    			                         
    		
    		}
    		delete [] srcArray;
    		srcArray=dstArr;
    
    		return true;
    	}catch(bad_alloc){
    		return false;
    	}
    }
    /*
    改变动态创建的一维数组的大小
    */
    template<class T>
    bool ChangeSize2D(T** &srcArray,int srcRows,int srcCols,int dstRows,int dstCols){
    	try{
    		//首先分配目标内存
    		T** dstArr;
    		dstArr=new T* [dstRows];         //将二维指针看成是一个存放指针(由一行元素组成的数组)的数组
    		for(int i=0;i<dstRows;i++){
    			dstArr[i]=new T[dstCols];    //为数组中存放的每一个指针,再分配一个数组
    		}
    
    		//实现对重新分配的数组元素的初始化
    		for(int i=0;i<dstRows;i++){
    			for(int j=0;j<dstCols;j++){
    				if(i<srcRows && j<srcCols){
    					dstArr[i][j]=srcArray[i][j];
    				}else{
    					dstArr[i][j]=T();     //使用默认构造函数进行初始化
    				}
    			}
    		}
    
    		//删除原动态分配的数组srcArray
    		for(int i=0;i<srcRows;i++){
    			delete[] srcArray[i];      //删除每一行的数组
    		}
    		delete[] srcArray;            //删除存储每一行指针的数组
    
    		//为原数组重新设置指向
    		srcArray=dstArr;	
    
    		return true;
    	}catch(bad_alloc){
    		return false;
    	}
    }
    #endif
  • 相关阅读:
    python+Appium自动化:BSTestRunner执行测试用例,生成测试报告
    python3基础:介绍几个函数的用法
    python3基础:格式化输出
    python+Appium自动化:框架设计
    python+Appium自动化:PageObject设计模型
    python+Appium自动化:logging配置代码分离
    python+Appium自动化:日志logging模块
    python+Appium自动化:yaml配置capability
    Monkey基本命令
    Monkey介绍
  • 原文地址:https://www.cnblogs.com/ql698214/p/5393281.html
Copyright © 2011-2022 走看看