一、二维数组

(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

数据结构算法应用C++语言描述——(1)C++基础知识的更多相关文章

  1. C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载

    维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...

  2. 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)

    数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...

  3. 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)

    开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...

  4. 《数据结构与算法分析-Java语言描述》 分享下载

    书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark A ...

  5. 数据结构与算法分析——C语言描述 第三章的单链表

    数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...

  6. 数据结构算法集---C++语言实现

    //数据结构算法集---C++语言实现 //各种类都使用模版设计,可以对各种数据类型操作(整形,字符,浮点) /////////////////////////// // // // 堆栈数据结构 s ...

  7. 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)

    #include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...

  8. 几种经典排序算法的R语言描述

    1.数据准备 # 测试数组 vector = c(,,,,,,,,,,,,,,) vector ## [] 2.R语言内置排序函数 在R中和排序相关的函数主要有三个:sort(),rank(),ord ...

  9. 《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes

    表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类 ...

随机推荐

  1. html进阶css(5)

    css定位机制 css有三种基本的定位机制:普通流,浮动和绝对定位. 除非专门指定,否则所有框都在普通流中定位.也就是说,普通流中的元素的位置由元素在html中的位置决定. 块级框从上到下一个接一个的 ...

  2. VS2015预览版中的C#6.0 新功能(三)

    VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(二) Using static 使用using StaticClass,你可以访问StaticClass类里的 ...

  3. android设置图片变化的四种效果代码

    activity代码如下: package com.example.chapter12_graphic_animation; import android.os.Bundle; import andr ...

  4. JavaScript 全局变量命名空间生成函数

    <script type="text/javascript"> var GLOBAL = {}; GLOBAL.namespace = function(str){ v ...

  5. c#或获取系统的特殊路径,如我的文档等

    Console.WriteLine(System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); System.E ...

  6. 配置sphinx

    1.先安装sphinxclient    #cd /usr/local/src    #wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz   ...

  7. 50个必备的实用jQuery代码段+ 可以直接拿来用的15个jQuery代码片段

    50个必备的实用jQuery代码段+ 可以直接拿来用的15个jQuery代码片段 本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从j ...

  8. ruby更换为淘宝的源

    我们在使用gem更新的时候,经常会为速度抓狂,其实gem默认的源是https://rubygems.org,比较慢众所周至的原因了. 可以将源更换到国内的taobao源 查看当前有的源 gem sou ...

  9. Python之路第十一天,高级(3)-线程池

    线程池 简单的线程池的实现: import queue import threading import time class ThreadPool(object): def __init__(self ...

  10. python之3内置容器

    所谓内置容器,就是不需要第三方模块,就可以使用的. 1.list容器,一个有序序列,类似于数组,但比数组强大很多 1.1.如何初始化list,直接一个[]即可,这是一个空的list >>& ...