链表

拾遗 运行时获取变量类型: 链表 空间:空间可以不连续,逻辑连续即可。 优缺点与数组相反。 循环链表,遍历方便,从任何一个节点开始遍历都可以。 链表总结: 空间:链式存储结构,空间可以不连续,逻辑连续即可。 时间: 增加:O(1),常量阶,快; 删除:O(1),常量阶,快; 修改:O(1),常量阶,快; (以上都是通过

动态数组

封装数据结构,效率优先,靠调用保持健壮性,所以一般不会出现try-catch,但是可以加断言宏,方便找问题。 new ((void*) obj) A; //不申请obj的空间,只调用A的构造函数,非标准 动态数组基本数据成员和功能: 成员: Type 元素 元素的个数 总共申请的空间大小 功能: 插入数据到末尾 在指定

数据结构和算法

自己在练习中总结各种数据结构的优缺点。 算法的五个特性: 1、有穷性 2、确定性 3、可行性 4、输入量(可以没有) 5、输出量 算法设计要求: 1、正确性 2、可读性 3、健壮性 4、高效与低存储 时间复杂度由低到高: 时间复杂度是指算法可执行时间的增长率,不能得出具体时间。 时间复杂度算增长率,只算最高阶。 快速判

异常处理

拾遗 VC6 watch窗口,变量名输入@err,hr 可以看错误信息,相当于GetLastError。 abort() 给出提示,终止程序。 terminate() 用于终止程序,会调用abort()。 断言宏: 例: assert后面的表达式为假(表达式不成立)时,报错,win环境只有在debug版有效。 部分C库

模板

函数模板 泛型编程: 从语法角度,C++的实现方式是模板,类型参数化。 语法: 因为class可能产生误解,所以推荐另一种写法: 函数模板只能写在全局或者类中,不能写在函数中。 模板声明和实现要写在一起,一般放在头文件.h中。 模板函数隐式实例化: 模板函数显示实例化: 各编译器对模板支持不同,尽量用标准写法。 不调用

运算符重载2_智能指针

运算符重载2 不能重载的运算符: . :: # ?: 前三个符号因为太特殊不能重载,最后一个是三元运算符,需要三个参数所以不能重载。 基本运算符不能在全局重载,C++规定有四个运算符 =, ->, [], ()不可以是全局中的重载, 即:不能重载为友员函数,只能重载为成员函数。 new重载,空时不调构造,非空时走构造。

运算符重载

运算符重载 重载已有运算符,赋予新功能。 语法: 返回类型 operator运算符 (形参) 在类中重载,形参有一个,表示运算符左边为对象,右边为形参,例如obj + 1; 在全局重载,形参有两个,从左至右分别表示运算符左边的参数、运算符右边的参数,例如1 + obj。 以“+”为例,类中有两个重载,分别是operat

抽象类_虚继承_多继承内存布局

抽象类 抽象类基本概念: 1、有些类不应该产生对象,例如,画个动物,画个图形,都具有多义性,不应该产生对象; 2、一个类至少有一个纯虚函数,这个类就是抽象类,例如: 3、抽象类无法实例化对象,写成员函数无意义; 4、使用时,当基类指针使用; 5、如果派生类没有实现纯虚函数,那么派生类也是抽象类; 6、抽象类中的纯虚函数