C++知识总结
抖立FLAG
你这个年龄,怎么睡得着觉?
展开
-
C++----智能指针
文章目录1、为什么需要智能指针2、智能指针的使用及原理3.1 智能指针的原理1、为什么需要智能指针#include <iostream>using namespace std;// C/C++bool Test1(){ // 成功返回true,失败返回false return false;}void Test2(){ // .. // 假设此处遇到非法情况 throw 1;}// 如果采用原生态指针(T*)管理资源,程序存在资源泄漏的风险就比较大vo原创 2020-06-23 14:14:34 · 216 阅读 · 0 评论 -
C++异常的处理
文章目录1、C语言传统处理错误的方式2、C++异常概念3、异常的用法3.1 异常的抛出与捕获3.2异常的重新抛出3.3异常安全3.4 异常规范4、标准库异常体系5、异常的优缺点1、C语言传统处理错误的方式2、C++异常概念3、异常的用法4、标准库异常体系5、异常的优缺点1、C语言传统处理错误的方式传统的错误处理机制:终止程序 如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码, 缺陷:需要程序员自己去查找对应的错误。 如系统的很多库的原创 2020-06-22 11:12:25 · 277 阅读 · 0 评论 -
哈希---开散列
目录标题开散列开散列实现开散列扩容开散列与闭散列比较上一篇讲解了关于哈希冲突的产生及其解决方式之一的 闭散列。本篇主要讲解 开散列开散列**开散列:**开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。从上图可以看出,开散列中每个桶中放的都是发生哈希冲突的元素。开散列实现template<class V>struct HashB原创 2020-06-09 15:18:21 · 287 阅读 · 0 评论 -
哈希的概念及运用---闭散列
1、哈希概念在常见的搜索方式中我们通常分为,静态的和动态的。静态搜索方式:给定一段序列数据 我们通用常采用:顺序查找----- for循环遍历 ——> O(N)二分查找---- 要求:带查找的数据排列必须是有序的这些方式都是在一个固定的序列中查找动态搜索方式 :底层结构发生改变,进行增 删等操作二叉搜索树 ---- 有序或者接近有序 ----> 退化成单支树 ——>查找效率 O(N)AVL树:二叉搜索树 + 平衡因子 ----->保证树的平衡性:任意节原创 2020-05-28 21:03:50 · 281 阅读 · 0 评论 -
c++ (十二、多态)
1. 多态的概念及实现2. 抽象类3. C++11中的 override 和 final4. 多态的原理5. 单继承和多继承关系中的虚函数表前言 本节课件中的代码及解释都是在vs20131、多态的概念1.1什么是多态通俗来说,就是多种形态,具体点就是去完成某个行为, 当不同的对象去完成时会产生出不同 的状态。1.2多态的分类:静态多态(静态绑定||早绑定):在编译阶段确定函数...原创 2019-12-11 10:08:39 · 163 阅读 · 0 评论 -
C++(十一、继承---图解易理解)
C++中的多态1、多态的概念2、多态的定义及实现3、抽象类4、c++中的override 和 final5、多态的原理6、单继承和多继承关系中的虚函数表——————————————————————————————前言需要声明的,本文代码及解释都是在vs2013下的x86程序中,涉及的指针都是4bytes。如果要其他 平台下,部分代码需要改动。比如:如果是x64程序,则需要考虑指针...原创 2019-11-13 17:05:56 · 266 阅读 · 0 评论 -
C++(十、复杂的菱形继承------理解全靠图)
、复杂的菱形继承多继承:一个子类有两个或以上直接父类注意:每个基类前必须给出继承权限,否则就是默认的继承权限。class B{public: int _b;};class C1 : public B{public: int _c1;};class C2 : public B{public: int _c2;};class D : public C1, ...原创 2019-11-10 21:38:59 · 158 阅读 · 0 评论 -
C++(九、继承)
c++中的继承1、继承的概念和定义2、基类和派生类对象的赋值转换3、继承中的作用域4、派生类的默认成员函数5、继承与友元6、继承与静态成员7、复杂的菱形继承——————————————————————————————1、继承的概念和定义继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性的基础上进行扩展,增...原创 2019-11-10 21:22:34 · 205 阅读 · 0 评论 -
C++(八、list模拟实现)
list的介绍及使用list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。与其他的序列式容器相比(a...原创 2019-10-23 19:59:25 · 121 阅读 · 0 评论 -
C++(七、vector 模拟实现)
vector的介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小 为了增加存储空间。其做法是,分...原创 2019-10-16 22:42:51 · 165 阅读 · 0 评论 -
c++ (六、string类的模拟实现)
1、 C语言中的字符串C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可 能还会越界访问字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作 单字节字符字符串的设计特性。.st...原创 2019-10-15 11:29:20 · 146 阅读 · 0 评论 -
C++(五、类与对象 下)
一、初始化列表在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。构造 函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内 可以多次赋值。类中包含以下成员,必须放在初始化列表位置进行初始化:1、引用成员变量 2、const成员变量 3、类类型成员(该类没有默认构造函数class Data{ //初始化列表...原创 2019-10-08 12:09:44 · 86 阅读 · 0 评论 -
c++(四、类与对象 中)
所有变量未给值时,都会被栈空间0xcc 初始化d.SetDate(2019,9,19);对于Date类,可以通过SetDate公有的方法给对象设置内容,但是如果每次创建对象都调用该方法设置信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?构造函数是一个特殊的成员函数,名字与类名相同, 构造函数不开辟空间创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并...原创 2019-10-08 12:02:01 · 104 阅读 · 0 评论 -
C++(三、类与对象 上)
1、类的引入class为定义类的关键字,ClassName为类的名字,{ }中为类的主体,注意类定义结束时后面分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。类的两种定义方式:(1) 将类的成员函数 定义和声明放在一起在工程中,不会将函数的申明和定义全部都在类里面,防止头文件包含多次时,被重复定义;struct Stu{ ...原创 2019-10-08 11:54:24 · 163 阅读 · 0 评论 -
C++(二、内联函数、auto、范围for循环、nullptr)
内联函数除了直接在函数名前面加 inline将成员函数放在类里面进行定义,编译器也可能将该函数当做内联函数进行对待c++中,被const 修饰的变量———常量具有宏替换的特性——〉在编译阶段进行替换的——〉会进行类型检测——〉安全性高int main(){ const int a = 5; // 编译期间,将所有带有a变量的都用5 进行替换 , 参与类型检测 //类似于...原创 2019-09-25 13:41:45 · 231 阅读 · 0 评论 -
C++(一、命名空间、缺省、函数重载、引用)
1、命名空间(1)、// 三种命名空间的定义方式//一个命名空间就相当于一个作用域#includeusing namespace std;int a = 1; // 全局变量a1、普通的命名空间namespace N1{int a = 10; // 命名空间中的变量aint b = 20;int Add(int left , int right){ return lef...原创 2019-09-17 21:07:42 · 284 阅读 · 0 评论