- 博客(23)
- 收藏
- 关注
转载 递归
什么是递归? 在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。 所谓递归,简单点来说,就是一个函数直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 我们可以把” 递归 “比喻成 “查字典 “,当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词。 可惜,第二个词里仍然有不懂的词...
2019-09-05 16:54:00
213
转载 数据结构、算法分析
数据结构:是数据元素的组织形式,或数据元素相互之间存在的一种或多种特定关系的集合。 (1) 集合 结构中的数据元素之间除了“同属于一个集合”的关系外,别无其他关系。例如,认定一个学生是否为班级的成员。 (2)线性结构 结构中的数据元素之间存在一个对一个的关系。例如,以学生入学报到的时间先后顺序排列的数据元素。 (3)树形结构 结构中的数据元素之间存在一个对多个的关系。例如...
2019-09-05 15:02:00
388
转载 STL中六大组件
1)容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器; 容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在STL中都被实现为容器。 序列容器 vector 内部数据结构:可变长动态数组。 向量,将元素置于一个动态数组中加以管...
2019-07-25 18:25:00
355
转载 RTTI RAII
RTTI(Run Time Type Identification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引用所指的对象的实际派生类型。 RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回指针和引用所指的实际类型。 (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。 typeid:...
2019-07-25 17:37:00
204
转载 #include和前置声明(forward declaration)
#include和前置声明(forward declaration) 1.当不需要调用类的实现时,包括constructor,copy constructor,assignment operator,member function,甚至是address-of operator时,就不用#include,只要forward declaration就可以了。 2.当要用...
2019-07-25 17:29:00
240
转载 OO七大设计原则
一、单一职责原则(Single Responsibility Principle,SRP) 含义: 1、避免相同的职责分散到不同的类中 2、避免一个类承担太多职责 作用: 1、可以减少类之间的耦合 2、提高类的复用性 一个类,只有一个引起它变化的原因。应该只有一个职责。每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。这会导致脆弱的设计。当一个职责...
2019-07-25 17:00:00
603
转载 C++异常处理try、catch 没有finally
程序的错误大致可以分为三种,分别是语法错误、逻辑错误和运行时错误: 1) 语法错误在编译和链接阶段就能发现,只有 100% 符合语法规则的代码才能生成可执行程序。语法错误是最容易发现、最容易定位、最容易排除的错误,程序员最不需要担心的就是这种错误。 2) 逻辑错误是说我们编写的代码思路有问题,不能够达到最终的目标,这种错误可以通过调试来解决。 3) 运行时错误是指程序在运行期间...
2019-07-25 16:57:00
1033
转载 虚函数
虚函数是动态联编的基础。虚函数是非static的成员函数 说明虚函数的方法如下: virtual <类型说明符><函数名>(<参数表>); 虚函数的使用方法是: 1、在基类用virtual声明成员函数为虚函数。 这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。在类外定义虚函数时,不必再加virtual。 2、在派...
2019-07-25 16:41:00
173
转载 重写(覆盖)和隐藏 重载区别 为什么需要隐藏
重写(覆盖):override 是指派生类中存在重新定义的函数。 (1)重写是指派生类函数覆盖基类函数。 (2)重写的特征: ①不同的作用域(分别位于派生类与基类); ②函数名字相同; ③参数相同; ④基类函数必须是虚函数;(重写的基类中被重写的函数必须有virtual修饰) ⑤重写函数必须和原函数具有相同的返回类型; ⑥const可能会使虚成员函数的重写失效。...
2019-07-25 16:30:00
185
转载 静态成员 static 能被继承吗
在类定义中,它的成员(包括数据成员和 成员函数)可以用关键字static声明为静 态的,这些成员称为静态成员 静态成员的特性: • 不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的 对象共享 静态成员包括: • 静态数据成员 • 静态成员函数 在一个类中,若将一个数据成员声明为 static,这种成员称为静态数据成员。 (静态数据成员在类内...
2019-07-25 16:28:00
4466
转载 运算符重载
运算符重载函数的形式是: • 返回类型 operator 运算符符号 (参数说明) { //函数体的内部实现 } • 至少有一个参数是自定义类型(数组,类) • 如果是单目运算符,只传一个参数 • 如果是双目运算符,传两个参数 c++也规定了一些运算符不能够自定义重载 • 例如 ::、sizeof、.、?: 常见运算符重载函数的使用 • 一种是作为类的友元函数进行...
2019-07-25 16:22:00
106
转载 友元
C++中的友元为数据隐藏这堵不透明的墙 开了一个小孔,外界可通过这个小孔窥 视类内部的秘密,友元是一扇通向私有 成员的后门 友元可分为:友元函数 友元成员 友元类 友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访 问该类的所有对象的成员,包括私有成 员和公有成员 在类定义中声明友元函数时,需在其函 数名前加上关键字friend。此声明可以 放在公有部...
2019-07-25 16:17:00
149
转载 new delete
malloc/free是标准的库函数,而new/delete是操作符 匹配使用原则:malloc(calloc/realloc)和free 以及new/new[] 和delete/delete[]; delete 释放new分配的单个对象指针指向的内存 delete[] 释放new分配的对象数组指针指向的内存 int *a = new int[10]; delete a;...
2019-07-25 16:16:00
97
转载 继承与派生
派生的方式 公有方式派生(public) 私有方式派生(private) 保护方式派生(protected) 多继承 多继承 多继承可以看作是单继承的扩展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一 个单继承。 当使用多继承时要注意避免发生二义性 class A { void print() {} }; ...
2019-07-25 16:14:00
86
转载 类与对象 浅拷贝和深拷贝
结构与类的区别是:默认访问级别不同 类使用注意: • 类的声明中的 private 和 public两个关键字可以按任意顺序出现任意次。为了使程序更加清晰,把所有私有成员和公有成员归类放在一起 • 除了 private 和 public 之外,还有 protected(保护性成员)关键字 • 数据成员可以是任何数据类型,但不能用auto、register或extern说明 ...
2019-07-25 16:13:00
191
转载 作用域 {}代码块 const修饰符 引用
简单分为:全局作用域、局部作用域、语句作用域 如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::” ::aver=20 #include<iostream> using namespace std; int var = 20; int main(int argc, char *argv[]) { int var = 10; ...
2019-07-25 15:20:00
177
转载 内联函数
编译器将使用相应的函数代码替换函数调用。因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存。 内联函数与宏定义的区别 C语言使用预处理器语句#define来提供宏。如下例所示: #define SQUARE(X) X*X 宏定义时通过文本替换开实现的--X是参数的符号标记。 a = square(5.0);->a=5.0*5.0; b = square...
2019-07-25 15:08:00
242
转载 namespace
命名空间的定义: namespace myName{ //namespacemember ...... } //注意没有分号 例: namespace CompanyA{ void fun() {//......} int num; } CompanyA::fun();CompanyA::num = 100; 一、 为什么需要命名...
2019-07-25 14:26:00
485
转载 Collection map
HashMap 的工作原理及代码实现 底层数组+链表实现,可以存储null键和null值,线程不安全 初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入 插入元素后才判断该不该扩容,有可能无效扩容(插入后如果扩容,如果没有再次插入,就会产生无效扩容) 当...
2019-07-25 11:21:00
98
转载 Collection set
HashSet: HashSet是采用hash表算法来实现的,其中的元素没有按顺序排列,主要有add()、remove()以及contains()等方法; add 方法实际调用hashmap put (map =newLinkedHashMap) public class HashSet<E> extends AbstractSet<E> ...
2019-07-25 11:18:00
70
转载 Collection Lists
ArrayList LinkedList Vector顺序添加 抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实现基本操作的算法。 ArrayList (1)ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长。 (2)ArrayList不是线程安全的, ArrayList实现了Serializable接口,因此它支持序列化。 (3...
2019-07-25 11:14:00
134
转载 java Collection
Interface Collection: public interface Collection<E> extends Iterable<E> {} Collection是java.util下的一个接口,它继承的类是Iterable<E>。它是关于集合方面的一个根接口,也就是java中所有处理集合的数据方面都是直接或者间接实现Co...
2019-07-25 11:11:00
100
转载 哈希表详解
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为...
2019-07-25 10:53:00
359
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人