数据结构、算法与应用(C++描述)阅读记录

本文介绍了C++中动态存储分配、异常处理、自有数据类型等预备知识。重点讲解了new操作符的使用,包括一维数组、二维数组的动态分配,异常类型bad_alloc以及delete操作释放内存。同时,提到了构造函数、析构函数、常量函数和作用域说明符等概念。
摘要由CSDN通过智能技术生成

第一部分:预备知识

第一章:C++回顾

    1.3异常:

            try块处理,catch块用来捕捉异常,catch块的参数的类型,决定了catch块捕捉异常的类型

            特别的,要是参数为exception,则可以捕捉基类别exception,以及exception派生出来的所有类别。

                          要是参数为   . . . 那么就可以捕捉所有的异常。  

    1.4动态存储空间分配

           ① new操作符用来进行动态存储分配和运行时存储分配,其值为一个指针,指向所有分配空间。

              操作流程为,先声明一个指针,再用为这个指针用new操作,如:int *y; y = new int;  new将分配出来空间的指针返回给y,则y只是表示整数所在的地址,而*y才是整数本身。

              int *y = new int(10);    ====     int *y = new int;  *y = 10;(因为y本身是一个地址,要想在地址中写数,就要用*)

           ②一维数组:

                由于编译时数组大小未知,所以要采用动态分配内存的方法:我们这样做:

                数组一定要声明为一个浮点型指针,然后分配足够的空间:float *x = new float[n];  new将为数组分配大小为n的空间,并将第一个元素所在位置返回给x。

            ③异常处理:

                    如果内存没有足够的空间来为数组分配空间,那么new操作就不会分配任何内存,而是抛出一个类型为bad_alloc的异常。

            ④delete操作:

                    动态分配的内存,不要了就要释放掉: 释放变量: delete  y;  释放数组 :delete  []x;

            ⑤二维数组:

                二维数组作为形参时,列数必须为已知量。

            可以在已知列数的情况下,用new来分配空间: char(*c)[5];  try{c= new char[n][5];} catch(bad_alloc){cerr<<"Out of memory"<<endl;   exit(1);}如果事先不知道数组的列数,那么想仅调用一次new来创建二位数组是不存在的,即便行数已知都不行。只能先构造一个表示行的一位数组,然后用表示列的一位数组依次对应每个行

                    char  **x;

                    释放:先释放每行的数组,再释放表示列的数组。delete []  x[i];    delete [] x;

    1.5自有数据类型

            public中声明的是用来对类进行操作的成员函数,对于类的用户是可见的,是用户与类对象进行交互的唯一手段。

            private中声明的是用户不可见的 数据成员和成员函数。

            构造函数(constructor):在类中,函数名和类名一样的函数是构造函数。其指明了创建一个类对象的方法,而且没有返回值。

            创建类对象的方法有两种:1、currency f, g(plus,3,34), h(minus,10)

                                                    2、currency *m = new currency(plus,8,12)    (note:用new构造的任何东西,都要放在一个指针变量里

            析构函数(destructor):在类名前加上~的函数,是析构函数,

            常量函数(用const声明的):不会改变调用对象的值

            函数返回引用:将一个引用返回给调用函数的环境中,这样不用复制。

            作用域说明符(scope resolution opearor ) : :  如currency::currency表示类currency的构造函数。

            note:1、在定义浮点数的时候,如果只写5.21,计算机保存的值可能比5.21小,可能是5.20998,只要在后面加上一个0.001,这样5.20998+0.001 = 5.21098,这样就对了。

                        2、在定义类的时候,在类中,只要声明成员函数就行,具体成员函数的定义,可以在后面用作用域说明符帮忙说明     如currency::add(...){.....},就是对currency中add函数的定义。

                        3、在C++中 *this 的作用就好像Python中的self一样。

+++++++++++++++++++++++++以上是2018年3月8日所写+++++++++++++++++++++++++++++++++++

        

Data Structures, Algorithms, and Applications in C++, Second Edition 出版者的话 译者序 前言 第一部分 预备知识 第1章 C++回顾 1.1 引言 1.2 函数与参数 1.2.1 传值参数 1.2.2 模板函数 1.2.3 引用参数 1.2.4 常量引用参数 1.2.5 返回值 1.2.6 重载函数 1.3 异常 1.3.1 抛出异常 1.3.2 处理异常 1.4 动态存储空间分配 1.4.1 操作符new 1.4.2 一维数组 1.4.3 异常处理 1.4.4 操作符delete 1.4.5 二维数组 1.5 自有数据类型 1.5.1 类currency 1.5.2 一种不同的描述方法 1.5.3 操作符重载 1.5.4 友元和保护性类成员 1.5.5 增加#ifndef、#define和#endif语句 1.6 异常类illegalParameterValue 1.7 递归函数 1.7.1 递归的数学函数 1.7.2 归纳 1.7.3 C++递归函数 1.8 标准模板库 1.9 测试与调试 1.9.1 什么是测试 1.9.2 测试数据的设计 1.9.3 调试 1.10 参考及推荐读物 第2章 程序性能分析 2.1 什么是程序性能 2.2 空间复杂度 2.2.1 空间复杂度的组成 2.2.2 举例 2.3 时间复杂度 2.3.1 时间复杂度的组成 2.3.2 操作计数 2.3.3 最好、最坏和平均操作计数 2.3.4 步数 第3章 渐近记法 3.1 引言 3.2 渐近记法 3.2.1 大Ο记法 3.2.2 渐近记法Ω和Θ 3.3 渐近数学(可选) 3.3.1 大O记法 3.3.2 Ω记法 3.3.3 Θ记法 3.3.4 小ο记法 3.3.5 特性 3.4 复杂度分析举例 3.5 实际复杂度 3.6 参考及推荐读物 第4章 性能测量 4.1 引言 4.2 选择实例的大小 4.3 设计测试数据 4.4 实验设计 4.5 高速缓存 4.5.1 简单计算机模型 4.5.2 缓存未命中对运行时间的影响 4.5.3 矩阵乘法 4.6 参考及推荐读物 第二部分 数据结构 第5章 线性表——数组描述 5.1 数据对象和数据结构 5.2 线性表数据结构 5.2.1 抽象数据类型linearList 5.2.2 抽象类linearList 5.3 数组描述 5.3.1 描述 5.3.2 变长一维数组 5.3.3 类arrayList 5.3.4 C++迭代器 5.3.5 arrayList的一个迭代器 5.4 vector的描述 5.5 在一个数组中实现的多重表 5.6 性能测量 5.7 参考及推荐读物 第6章 线性表——链式描述 6.1 单向链表 6.1.1 描述 6.1.2 结构chainNode 6.1.3 类chain 6.1.4 抽象数据类型linearList的扩充 6.1.5 类extendedChain 6.1.6 性能测量 6.2 循环链表和头节点 6.3 双向链表 6.4 链表用到的词汇表 6.5 应用 6.5.1 箱子排序 6.5.2 基数排序 6.5.3 凸包 6.5.4 并查集 第7章 数组和矩阵 7.1 数组 7.1.1 抽象数据类型 7.1.2 C++数组的索引 7.1.3 行主映射和列主映射 7.1.4 用数组的数组来描述 7.1.5 行主描述和列主描述 7.1.6 不规则二维数组 7.2 矩阵 7.2.1 定义和操作 7.2.2 类matrix 7.3 特殊矩阵 7.3.1 定义和应用 7.3.2 对角矩阵 7.3.3 三对角矩阵 7.3.4 三角矩阵 7.3.5 对称矩阵 7.4 稀疏矩阵 7.4.1 基本概念 7.4.2 用单个线性表描述 7.4.3 用多个线性表描述 7.4.4 性能测量 第8章 栈 8.1 定义和应用 8.2 抽象数据类型 8.3 数组描述 8.3.1 作为一个派生类实现 8.3.2 类arrayStack 8.3.3 性能测量 8.4 链表描述 8.4.1 类derivedLinkedStack 8.4.2 类linkedStack 8.4.3 性能测量 8.5 应用 8.5.1 括号匹配 8.5.2 汉诺塔 8.5.3 列车车厢重排 8.5.4 开关盒布线 8.5.5 离线等价类问题 8.5.6 迷宫老鼠 8.6 参考及推荐读物 第9章 队列 9.1 定义和应用 9.2 抽象数据类型 9.3 数组描述 9.3.1 描述 9.3.2 类arrayQueue 9.4 链表描述 9.5 应用 9.5.1 列车车厢重排 9.5.2 电路布线 9.5.3 图元识别 9.5.4 工厂仿真 9.6 参考及推荐读物 第10章
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值