自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 移动对象

目录前言右值引用前言在很多条件下,一个对象在被复制后立刻被销毁了,在这些情况下,对象的移动比复制更加好,可以提高效率。同时有些类的资源不能共享,例如unique_ptr类,所以需要移动。右值引用定义:必须绑定到右值,通过&&获得一个右值引用,它们只能绑定到将要销毁的对象。因此我们可以自由的将一个...

2020-07-10 13:57:22 304

原创 动态内存

目录前言1 动态内存和智能指针1.1 shared_ptr类1.1.1 make_shared函数1.1.2 复制和赋值shared_ptrs1.1.3 自动销毁对象和释放相关内存1.2 直接管理内存1.3 利用shared_ptr和new1.4 unique_ptr1.5 weak_ptr2 动态数组2.1 new和数组2.2 allocator类参考前言程序中用到的不同对象有不同的生命周期。全局对象:在程序开始时被分配,在程序结束时销毁。局部自动对象在程序进入到定义的块体时被创建,退出时被销毁

2020-07-10 10:46:24 143

原创 变量和基本字节

目录1. 原始内置类型1.1 算术类型1.2 类型转换1. 原始内置类型C++中包含了两种原始类型:算术类型(arithmetic types)特殊类型void :很少用,一般用作函数无返回值。1.1 算术类型算术类型分为两类:整数类型(integral types) 和 浮点类型(floating-point types)。在不同的机器上,整数类型占的位是不同,最小的位数要求如下表:对于整数类型来说,除了bool和扩展的字符类型(wchar_t, char16_t, char32_t)

2020-07-08 15:12:36 296

原创 C++ plus

函数-C++的编程模块函数参数和数组、字符串函数参数的三种传递方式按值传递地址传递引用传递函数和数组函数和字符串函数和C-风格字符串函数和string对象函数和结构函数参数和数组、字符串函数参数的三种传递方式按值传递地址传递引用传递按值传递将数值参数传递给函数,函数将其赋值给一个新的变量。double volume = cube(side);//函数调用,side=5.dou...

2019-11-04 14:49:06 1015

原创 深入了解函数

函数探幽内联函数内联函数的使用引用变量创建引用变量将引用用作函数参数引用的属性和特别之处何时使用引用参数默认参数函数重载函数模板显示具体化实例化和具体化内联函数内联函数的编译代码与其他程序代码“内联”起来了。正常的函数调用情况是当执行到函数调用指令时,会存储指令的地址,然后复制函数的参数到栈堆中,程序调到被调用函数起点的内存单元,执行函数代码,然后再返回到地址被保存的指令处。而使用内联函数后,...

2019-11-04 14:48:53 671

原创 内存问题和名称空间

目录存储持续性、作用域和链接性作用域和链接自动存储持续性静态持续变量静态持续性、外部链接性静态持续性、内部链接性静态存储性持续、无连接性说明符合限定符函数和链接性动态分配存储持续性、作用域和链接性C++用三种(C++11是四种)不同方案存储数据:自动存储持续性:在函数定义中声明的变量(包括函数参数)的存储持续性为自动的。在程序开始执行其所属的函数和代码块时被创建,在执行完函数或代码后,它们...

2019-11-04 14:48:45 97

原创 对象和类

目录抽象和类C++中的类实现类成员函数类的构造函数和析构函数构造函数声明和定义构造函数使用构造函数默认构造函数析构函数补充this指针类作用域抽象和类面向过程编程首先考虑要遵循的步骤,然后考虑如何表示这些数据。面向对象编程(oop)首先考虑数据,不仅要考虑如何表示数据,还要考虑如何使用数据。OOP特性:抽象封装和数据隐藏多态继承代码的可重用性C++中的类类是一种将抽象转换...

2019-11-04 14:48:34 78

原创 使用类

目录运算符重载友元友元函数友元类友元成员函数类的自动转换和强制类型转换类的自动转换转换函数运算符重载运算符函数格式:operator op(argument-list)op必须是有效的C++运算符。重载限制:重载后的运算符必须至少有一个操作数是用户定义的类型。‘=’、‘()’、‘[ ] ’、‘->’只能通过成员函数重载。友元通过友元可以访问类对象私有部分的访问,三种友元...

2019-11-04 14:48:24 63

原创 类和动态内存分布

目录动态内存和类特殊成员函数默认构造函数复制构造函数赋值运算符静态类成员函数在构造函数中使用new时注意的事项有关返回对象的说明返回指向const对象的引用返回指向非const对象的引用返回对象返回const对象队列模拟动态内存和类静态数据成员在类声明中声明,在包含类方法的文件中初始化。但如果静态成员是整型或枚举型const,则可以在类声明中初始化。字符串并不保存在对象中,字符串单独保存在堆...

2019-11-04 14:48:10 111

原创 [leetcode-890] 查找和替换模式

题目:你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)返回 words 中与给定模式匹配的单词列表。你可...

2019-10-23 15:20:15 144

原创 [leetcode-856] 括号的分数

题目:给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。示例 1:输入: "()"输出: 1示例 2:输入: "(())"输出: 2示例 3:输入: "()()"输出: 2示例 4:输入: "(()(()))"输出:...

2019-10-23 12:55:56 522

原创 最小生成树

目录Kruskal算法Prim算法构造最小生成树的方法:Kruskal算法和Prim算法Kruskal算法算法过程:任给一个有n个顶点的连通网络N={V, E},首先构造由n个顶点组成、不含任何边的图T={V, 空集},其中每个顶点自从一个连通分量。不断从E中取出权值最小的一条边,若该边的两个端点来自不同的连通分量,则将此边加入到T中。重复至所有顶点在同一个连通分量上为止。伪代码描述T ...

2019-10-22 23:03:28 151

原创 并查集

目录并查集的定义并查集的存储和实现并查集的定义支持三种操作:Union(Root1,Root2):把子集合Root2并入集合Root1中。要求Root1和Root2互不相交,否则不执行合并。Find(x):搜索单元素x所在的集合,并返回该集合的名字。UFSets(s):构造函数,将并查集中s个元素初始化为s个只有一个单元素的子集合。并查集的存储和实现并查集中需要两种数据类型的参数...

2019-10-22 22:30:38 104

原创 图的概念和存储

目录基本概念存储结构图的邻接矩阵表示图的邻接表表示图的邻接多重表表示基本概念完全图:由n个顶点组成的无向图中,若有 n(n-1)/2条边,则称为无向完全图。度:与顶点关联的边数。连通图与连通分量:在无向图中,若从点v1到v2有路径,则称顶点v1和v2是连通的。如果图中任意一对顶点都是连通的,则称此图是连通图。非连通图的极大连通子图叫做连通分量。存储结构图的邻接矩阵表示所有顶点的信息组...

2019-10-22 21:41:15 126

原创 AVL树和红黑树

目录AVL树的插入红黑树(特殊的二叉搜索树)AVL树可以是空树或者具有下列性质的二叉搜索树:左右子树都是AVL树,且左子树和右子树的高度之差的绝对值不超过1。AVL树的插入新结点p的平衡因子为0,它的父结点为pr,修改后pr的平衡因子值有三种情况:结点pr的平衡因子为0,不需要进行平衡化处理结点pr的平衡因子的绝对值|bf|=1,需要从结点pr向根的方向回溯,进行平衡化处理结点...

2019-10-22 15:15:46 131

原创 二叉搜索树(BST)

目录二叉搜索树的搜索二叉搜索树的插入二叉搜索树的删除性质:每个结点都有一个作为搜索依据的关键码(key),所有结点的关键码互不相同。左子树上的所有结点的关键码都小于根结点的关键码。右子树上的所有结点的关键码都大于根结点的关键码。左子树和右子树也是二叉搜索树。二叉搜索树的搜索从根结点开始,沿着某一个分支逐层向下进行比较判断的过程。可以是一个递归的过程。假设想要在二叉搜索树搜索关键码...

2019-10-22 14:28:09 164

原创 散列

目录散列函数几种散列函数:处理冲突的闭散列:处理冲突的开散列方法元素的存储位置与它的关键码之间有一个确定的对应函数关系Hash():Address=Hash(key)散列函数构造散列函数要求:散列函数的定义域必须包括需要存储的全部关键码散列函数计算出来的地址应能均匀分布在整个地址空间中散列函数应该简单几种散列函数:除留余数法:取最接近于或等于m的质数p作为除数。数字分析法...

2019-10-22 11:08:55 216

原创 树、堆与Huffman树

目录树的遍历子女-兄弟链表表示法,是一种二叉树表示法。它的每个结点的度d=2,每个结点由3个域组成:|data|firstChild|nextSibling| 左孩子右兄弟。树的遍历利用子女-兄弟链实现遍历树的深度优先遍历:利用递归进行先根次序遍历和后根次序遍历。树的广度优先遍历:借助队列。在访问某一层的结点时,扫描它的所有子女(循子女的右兄弟链),把它们依次进队列。//深度优先#...

2019-10-22 10:12:09 119

原创 二叉树的存储与遍历

目录二叉树二叉树的性质二叉树的存储表示数组存储表示链表存储表示二叉树遍历及其应用三种遍历方式:利用二叉树前序遍历建立和输出二叉树二叉树遍历的非递归算法结点的度:结点所拥有的子树棵数。结点的层次:从根到该结点所经路径上的分支条数。叶结点:度为0的结点。树的深度:树中距离根结点最远的结点所处层次即为树的深度。树的度:树中结点的度的最大值。有序树:树中结点的各棵子树是有次序的。二叉树特点...

2019-10-21 21:57:23 231

原创 栈和队列

目录栈顺序栈链式栈栈的应用——表达式的计算栈栈定义:只允许在表的末端进行插入和删除的线性表。栈是后进先出。栈的抽象数据类型有两种典型的存储表示:基于数组的存储表示的顺序栈和基于链表的存储表示的链式栈。栈的类定义:const int maxSize=50;enum bool{false,true};template<class T>class Stack{public:...

2019-10-21 16:19:17 147

原创 线性表

目录顺序表单链表头结点和头指针单链表的类定义循环链表双向链表静态链表线性表为n个数据元素的一个有限的序列。线性表的第一个表项称为表头,最后一个表项称为表尾。线性表是一个有限序列,意味着表中各个表项是相继排列的,且两个相邻表项之间都有直接前驱和直接后继的关系。邻接关系是1对1的。线性表的存储表示有两种:顺序存储方式和链表存储方式。顺序表用顺序存储方式实现的线性表,是用数组作为表的存储结构的...

2019-10-19 13:33:24 135

原创 初识数据结构

摘要:本系列博客是笔者学习《数据结构》(清华大学出版社)的一些见解和摘记,希望可以与大家一起讨论交流,希望各位可以提出自己的宝贵意见!目录数据结构概念数据结构概念数据:信息的载体,对客观事物的描述以及可用于计算机的符号集合(通俗就是能提供信息的东西)。数据的基本单位是数据元素,即构成数据的成员。数据元素中的数据项按是否能再分割有初等项和组合项。数据结构:描述数据元素之间的关系,分为:线性...

2019-10-18 20:05:39 95

原创 [leetcode-833] 字符串中的查找与替换

题目描述:对于某些字符串 S,我们将执行一些替换操作,用新的字母组替换原有的字母组(不一定大小相同)。每个替换操作具有 3 个参数:起始索引 i,源字 x 和目标字 y。规则是如果 x 从原始字符串 S 中的位置 i 开始,那么我们将用 y 替换出现的 x。如果没有,我们什么都不做。举个例子,如果我们有 S = “abcd” 并且我们有一些替换操作 i = 2,x = “cd”,y = “f...

2019-10-17 18:49:45 112

原创 string类和标准模板库

目录string类string类输入智能指针模板类标准模板库模板类vector泛型编程vectordequelistforward_listqueuepriority_queuestack关联容器无序关联容器函数对象函数符概念string类string类的构造函数构造函数描述string(const char*s)将string对象初始化为s指向的NBTSstri...

2019-10-16 22:38:54 93

原创 [leetcode-816] 模糊坐标

题目描述:我们有一些二维坐标,如 “(1, 3)” 或 “(2, 0.5)”,然后我们移除所有逗号,小数点和空格,得到一个字符串S。返回所有可能的原始字符串到一个列表中。原始的坐标表示法不会存在多余的零,所以不会出现类似于"00", “0.0”, “0.00”, “1.0”, “001”, "00.01"或一些其他更小的数来表示坐标。此外,一个小数点前至少存在一个数,所以也不会出现“.1”形式...

2019-10-16 13:44:09 266

原创 [leetcode-809] 情感丰富的文字

题目描述:有时候人们会用重复写一些字母来表示额外的感受,比如 “hello” -> “heeellooo”, “hi” -> “hiii”。我们将相邻字母都相同的一串字符定义为相同字母组,例如:“h”, “eee”, “ll”, “ooo”。对于一个给定的字符串 S ,如果另一个单词能够通过将一些字母组扩张从而使其和 S 相同,我们将这个单词定义为可扩张的(stretchy)。扩张...

2019-10-16 10:44:51 105

原创 异常和其他

目录嵌套类嵌套类和访问权限异常异常机制RTTIdynamic_casttypeid运算符和type_info类嵌套类将类声明放在另一个类中,在另一个类中声明的类被称为嵌套类。嵌套类和访问权限作用域声明位置包含它的类是否可以使用它从包含它的类派生而来的类是否可以使用它在外部是否可以用私有部分是否否保护部分是是否公有部分是是是,通过类...

2019-10-15 19:17:41 90

原创 C++中的代码重用

目录包含对象成员的类初始化被包含的对象私有继承(private)访问基类的方法访问基类对象访问基类的友元函数保护继承多重继承虚基类新的构造函数规则类模板定义类模板包含对象成员的类实现has-a关系的途径初始化被包含的对象对于继承的对象,构造函数在成员初始化列表中使用类名来调用特定的基类构造函数。对于成员对象和内置类型的成员则使用成员名。注意:初始化列表中的项目被初始化的顺序为它们被声明的...

2019-10-15 09:58:32 473

原创 类继承

目录公有派生派生类和基类的关系多态公有继承静态联编和动态联编虚函数工作原理虚函数注意事项访问控制:protect抽象基类继承和动态内存分配派生类不使用new派生类使用new类设计回顾默认构造函数构造函数复制构造函数赋值运算符析构函数转换按值传递对象与传递引用返回对象和返回引用使用const公有继承的考虑因素以公有方式派生的类的对象可以通过多种方式使用基类方法从一个类派生出另一个类时,原始类称为基...

2019-10-14 10:44:11 192

原创 C++——指针

指针知识点指针和自由存储空间指针的危险指针和数字使用new来分配内存使用delete释放内存指针、数组和指针算术指针算术指针和数组指针和字符串函数指针函数指针的基础知识深入探讨函数指针指针和自由存储空间指针是一个变量,存储的是值的地址。对变量应用地址运算符(&),就可以获得它的位置。将地址视为指定的量,而将值视为派生量,指针用于存储值的地址。因此指针名表示地址,* 运算符被称为解除引用...

2019-10-10 20:56:45 118

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除