Skip to content

HumorLogic/Effective-C-plus-plus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Effective C++

logo 关于 C++ 编程技术知识结构的整理总结。包含基础编程知识、算法数据结构、编程思想、
设计模式、优质的学习项目等。

目录:

  1. 【C++技术知识】
  2. 【C++类库】
  3. 【数据结构与算法】
  4. 【编程思想】
  5. 【设计模式】
  6. 【优质学习项目】
  7. 【学习资料】

1. C++技术知识

目录 内容
1、预备知识 1. C++介绍     2. 创建程序     3. 什么是编译     4. 基本输入/输出   5. 预处理器     6. 头文件    

2、变量和类型 1. 基本数据类型     2. 变量     3. 匈牙利命名法    

3、运算符 1. 算数运算符     2. 关系运算符     3. 逻辑运算符     4. 位运算符     5. 赋值运算符     6. 杂项运算符    
4、控制语句 1. 选择语句     2. 迭代语句(循环)     3. 跳转语句    

5、复合类型 1. string字符串     2. 数组     3. 结构     4. 枚举     5. 共同体     6. 指针     7. 类型组合    

8. 数组替代品    

6、函数 1.函数介绍     5.函数指针      6.内联函数     7.引用变量

7、指针 1. 指针介绍     2. 指针声明和初始化     3. 使用new创建动态数组、结构    

8、内存模型 1. 内存模型介绍     2. 作用域2     3. 链接性     4. 存储持续性     5.    

9、对象和类 1. 面向对象特性     2. 创建一个简单的类     3. 定义类成员函数     4. 使用类      

5. 构造函数和析构函数     6. this指针     7. 其他     8. 抽象数据类型    

10、面向对象特性 1. 继承     2. 多态     3. 抽象     4. 友元     5. 重载     6. 封装     7. 接口    

11、模板 1. 函数模板     2. 类模板     3. 智能指针模板类    

12、STL 1. 标准模板库(STL)     2. 容器类     3. 迭代器     4. STL算法    

12、容器 1. 标题     2. 标题     3. 标题    
13、其他 1. 说明符和限定符:extern     2. 多线程     3. 类型转换     4. 异常     5. 标题    

内容参考:
《C++ Primer Plus》cplusplus.com/tutorial


2. 数据结构与算法

数据结构(Data Structure) 是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。
算法(Algorithm) 是为求解一个特定问题需要遵循的、被清楚指定的简单指令的集合。这里的算法主要是排序和查找问题。

2.1 数据结构

目录 内容
数组Array 内容
链表Linked List 内容
栈Stack 内容
队列Queue 内容
堆Heap 内容
散列表Hash 内容
图Graph 内容
树Tree 内容

2.2 算法

2.2.1 算法思想

目录 内容
算法思想 贪婪算法
分而治之
动态规划
回溯法
分支定界

2.2.2 排序算法

排序算法 Sort Algorithm

1.插入排序
  • 直接插入排
  • 序希尔排序

2.选择排序
  • 简单选择排序
  • 堆排序

3.交换排序
  • 冒泡排序
  • 快速排序
4.归并排序



5.横排序


6.计数排序


7.桶排序


8.基数排序

2.2.3 查找算法

查找算法 Find Algorithm
1.顺序表查找




2.有序表查找
  • 二分查找
  • 插值查找
  • 斐波那契查找

3.线性索引查找
  • 稠密索引
  • 分块索引
  • 倒排索引

4.树表查找
  • 二叉查找树
  • 平衡查找树
  • 多路查找树

5.散列表查找
  • 散列函数
  • 冲突处理


3. 编程思想

logo      以下内容为《Effective C++:改善程序与设计的55个具体做法》—— Scott Meyers中的55个建议。

改善程序与设计的55个具体做法

1.让自己习惯C++


  • 01:视C++为一个语言联邦
  • 02:尽量以constenumsinline,替换#define
  • 03:尽可能使用const
  • 04:确定对象被使用前已被初始化




2.构造/析构/赋值运算

  • 05:了解C++默默编写并调用哪些函数
  • 06:若不想使用编译器自动生成的函数,就该明确拒绝
  • 07:为多态基类声明virtual析构函数
  • 08:别让异常逃离析构函数
  • 09:绝不在构造和析构过程中调用virtual函数
  • 10:令operator= 返回一个reference to *this
  • 11:在operator= 中处理“自我赋值”
  • 12:复制对象时勿忘其中每一个成分

3.资源管理


  • 13:以对象管理资源
  • 14:在资源管理类中小心copying行为
  • 15:在资源类中提供对原始资源的访问
  • 16:成对使用newdelete时要采取相同形式
  • 17:以独立语句将newed对象置入智能指针




4.设计与声明

  • 18:让接口容易被正确使用,不易被无用
  • 19:设计class时犹如设计type
  • 20:宁以pass-by-reference-to-const替换pass-by-value
  • 21:必须返回对象时,别妄想返回其reference
  • 22:将成员变量声明为private
  • 23:宁以non-membernon-friend替换member函数
  • 24:若所有参数皆需要类型转换,请为此采用non-member函数
  • 25:考虑写出一个不抛出异常的swap函数

5.实现


  • 26:尽可能延后变量定义式的出现时间
  • 27:尽量少做转型动作
  • 28:避免返回handles指向面向对象内部成分
  • 29:为“异常安全”而努力是值得的
  • 30:透彻了解inlining的里里外外
  • 31:将文件间的编译依存关系降至最低



6.继承与面向对象设计

  • 32:确定你的public继承塑模出is-a关系
  • 33:避免遮遮掩掩而来的名称
  • 34:区分接口继承和实现继承
  • 35:考虑virtual函数以外的其他选择
  • 36:绝不重新定义继承而来的non-virtual函数
  • 37:绝不重新定义继承而来的缺省参数值
  • 38:通过复合模出has-a或“根据某物实现出”
  • 39:明智而审慎地使用private继承
  • 40:明智而审慎地使用多重继承

7.模板与泛型编程

  • 41:了解隐式接口和编译期多态
  • 42:了解typename的双重意义
  • 43:学习处理模板化基类内的名称
  • 44:将参与无关的代码抽离templates
  • 45:运用成员函数模板接受多有兼容类型
  • 46:需要类型转换时请为模板定义非成员函数
  • 47:请使用traits classes表现类型信息
  • 48:认识template元编程

8.定制new和delete


  • 49:了解new-handler的行为
  • 50:了解newdelete的合理替换时机
  • 51:编写newdelete时需要固守常规
  • 52:写了placement new 也要写placement delete





9.杂项讨论

  • 53:不要轻忽编译器的警告
  • 54:让自己熟悉包括TR1在内的标准程序库
  • 55:让自己熟悉Boost


10.更多


  • ...



4. 设计模式

4.1 设计模式介绍

设计模式是科学组织设计软件的代码结构,目的是为了能更好的应对软件开发的变化,管理复杂度,易维护
易扩展,让代码做到:

  1. 可复用
  2. 低耦合
  3. 业务封装

设计模式的核心是抽象,通过抽象来进行复杂度管理。

4.2 面向对象设计7大原则

原则 内容
1、单一职责原则SRP
  • 一个类应该有一个,且只有一个引起改变的原因,这意味着一个类应该只有一个职责。
2、开放-封闭原则OCP
  • 软件(包括类、模块、函数等)应该能够做到可扩展,但不能不修改它。
3、依赖倒转原则DIP
  • 高层不依赖底层,双方都应该依赖抽象。
  • 抽象不依赖细节,而细节应该依赖抽象。
4、里氏替换原则LSP
  • 子类必须可以替换父类。
  • 一个可以接受父类对象的地方必然可以接受一个子类对象。
5、接口隔离原则ISP
  • 使用多个专门的接口来取代一个统一的接口
  • 客户端不应该依赖它不需要的接口
  • 类间的依赖关系应该建立在最小的接口上
6、迪米特原则LKP
  • 一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。
  • 如果一个类需要调用另一个类的方法的话,可以通过第三者转发这个调用。
7、合成复用原则CRP
  • 尽量使用合成/聚合,尽量不要使用类继承。

4.3 常用的设计模式

创建型模式 结构型模式 行为型模式
1.简单工厂模式 ★★★★☆ 1.适配器模式 ★★★★☆ 1.命令模式     ★★★★☆
2.工厂方法模式 ★★★★★ 2.桥接模式     ★★★☆☆ 2.中介者模式★★☆☆☆
3.抽象工厂模式 ★★★★★ 3.装饰模式     ★★★☆☆ 3.观察者模式 ★★★★★
4.建造者模式    ★★☆☆☆ 4.外观模式      ★★★★★ 4.状态模式     ★★★☆☆
5.单例模式        ★★★★☆ 5.组合模式     ★★★★☆ 5.迭代器模式 ★★★★★
6.原型模式        ★★★☆☆ 6.MVC模式     ★★★★★ 6.策略模式     ★★★★☆

About

Effective C++ 知识体系

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published