![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++编程相关
文章平均质量分 84
晴夏。
“愿与你纵横七海,请伴我阅遍千秋”
展开
-
通俗易懂的讲解回调函数,保证让你看懂callback
什么是回调函数?相信很多人都似懂非懂,半懂不懂,今天就通俗易懂的讲解回调函数,让你能理解回调函数的大部分作用及意义。原创 2023-02-12 22:50:03 · 5022 阅读 · 1 评论 -
智能指针用法及其使用代码详解
网络上大多有关智能指针的解析只停留于简单的八股,今天来详细解析一下三种智能指针的用法以及具体的代码。目录概念RAII机制介绍智能指针雏形shared_ptr原理介绍shared_ptr使用方法unique_ptrweak_ptr概念智能指针不是一个指针,它其实是一个对象。它是通过C++的RAII机制实现的。主要是利用C++中对象在释放的时候,会自动调用析构函数这一特性。所以,当智能指针对象释放的时候,在智能指针对象的析构函数中来释放其管理的内存资源。这原创 2022-04-27 13:47:30 · 2822 阅读 · 0 评论 -
设计模式——观察者模式
观察者模式意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。张三欠了很多人钱。债主想找张三催债,但是每天都去催(轮询)的话很麻烦。于是张三说,等我有钱了就通知你们。所以在这里,张三和债主的依赖关系就是观察者模式。也称为发布订阅模式。观察者模式定义了对象间的一对多模式,每当一个对象状态改变时,其相关依赖对象皆得到通知并自动更新。从代码的角度来说:张三需要实现借款和通知所有人的接口。贷款方不止一个人,所以需要用一个数据结构来维原创 2022-02-20 13:35:32 · 211 阅读 · 0 评论 -
平衡二叉树
平衡二叉树都是二叉排序树,因此先来讲讲二叉排序树:二叉排序树的效率取决于二叉排序树的形态。为了获得较好的查找效率,就要构造一棵形态均匀的二叉排序树,即平衡二叉树。平衡二叉树就是为了将树的高度尽可能降低,减少查找时间。插入新结点后,检查只需沿插入位置向根的路径回溯,中间经过的结点才需要检查,其他的结点不需要检查。需调整的结点从发生不平衡的结点开始,沿回溯的路径取直接下两层结点,共3个结点以上是对那三个结点的处理,但是如果这三个结点带有孩子,则可能孩子要交由别人带了,现在来看看具体的例原创 2021-01-11 11:24:08 · 435 阅读 · 4 评论 -
有向无环图—关键路径详解(最通俗易懂的版本)【数据结构】
文章目录有向无环图拓扑排序AOV-网AOE-网关键路径的概念事件的最早/晚开始时间事件和活动的区分活动的最早/晚开始时间有向无环图拓扑排序AOV-网由于有向无环图可以用一种自然的方式对优先关系或依赖关系进行描述,因此在工程计划与管理方面有广泛而重要的应用。一个大的工程往往可以分解为若干相对独立的子工程(活动),子工程之间在进行的时间上有一定的相互制约关系。将这些子工程之间的先后关系用有向图表示,其中顶点表示活动,有向边表示活动之间的优先制约关系,称这种有向图为顶点表示活动的网,简称AOV网。原创 2021-01-10 15:00:50 · 24093 阅读 · 8 评论 -
经典的排序算法详解【更新中】
希尔排序#include <iostream> using namespace std; void InsertSort(int gap, int m,int array[],int len)//m为每个子序列的第一个元素{ int i, j, temp; for (i=gap+m; i<=len; i+=gap) { // 从第二个元素gap+m开始 temp = array[i]; for (j=i-gap; j>原创 2021-01-08 23:09:51 · 120 阅读 · 0 评论 -
基数排序全面详解【数据结构】(桶排序、多关键字排序、链式基数排序)
基数排序桶排序首先来看看桶排序:为什么桶排序的时间复杂度是O(M+N)?因为分配的时间复杂度是M(也就是桶的数量),而收集起来的时间复杂度是N,因此最终时间复杂度是O(M+N)。上面那种是理想的桶排序,因为最终成绩的范围是在小范围内。但是如果成绩的范围很大:对于一个数,例如523,排序的思想很简单,比它大的排它后面,比它小的排它前面。那么一个数如果比523小,可以分为三种情况:百位数比5小百位数=5,十位数比2小百位数=5,十位数=2,个位数比3小那接下来来介绍一下基数排原创 2021-01-04 22:08:48 · 1529 阅读 · 0 评论 -
数据结构复习笔记【下】【更新中】
文章目录内部排序2路归并排序基数排序桶排序算法原理链式基数排序收集的作用性能分析代码实现内部排序2路归并排序基数排序桶排序首先来看看桶排序:为什么桶排序的时间复杂度是O(M+N)?因为分配的时间复杂度是M(也就是桶的数量),而收集起来的时间复杂度是N,因此最终时间复杂度是O(M+N)。上面那种是理想的桶排序,因为最终成绩的范围是在小范围内。但是如果成绩的范围很大:对于一个数,例如523,排序的思想很简单,比它大的排它后面,比它小的排它前面。那么一个数如果比523小,可以分为三种原创 2021-01-04 21:24:01 · 522 阅读 · 0 评论 -
数据结构复习笔记【上】【更新中】
文章目录线性表顺序表链表堆栈队列串线性表顺序表#include <iostream>using namespace std;class List{ int *list; int maxsize; int size;public: List(){ maxsize=1000; size=0; list=new int[maxsize]; int len; cin>&g原创 2021-01-02 23:42:43 · 255 阅读 · 1 评论 -
KMP算法——让你全面透彻理解KMP算法【寻找子串第一次出现在主串中的位置(C++实现)】
文章目录理论背景普通的算法(穷举法)KMP算法kmp算法思想代码实现代码解析理论背景KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)普通的算法(穷举法)其实很好理解,就是拿子串的原创 2021-01-02 23:40:48 · 3207 阅读 · 0 评论 -
DS图—图的最短路径【用迪迦特斯拉算法求最短路径】
题目描述给出一个图的邻接矩阵,输入顶点v,用迪杰斯特拉算法求顶点v到其它顶点的最短路径。输入第一行输入t,表示有t个测试实例第二行输入顶点数n和n个顶点信息第三行起,每行输入邻接矩阵的一行,以此类推输入n行第i个结点与其它结点如果相连则为距离,无连接则为0,数据之间用空格隔开。第四行输入v0,表示求v0到其他顶点的最短路径距离以此类推输入下一个示例输出对每组测试数据,输出:每行输出v0到某个顶点的最短距离和最短路径每行格式:v0编号-其他顶点编号-最短路径值----[最短路径]。没有原创 2020-11-30 15:44:49 · 676 阅读 · 0 评论 -
货币套汇(图路径)【数据结构-深度优先搜索-回路】
这题感觉有点小难(估计还是我太菜题目描述套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币。例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5 法郎,1法郎可以买到0.16美元。通过货币兑换,一个商人可以从1 美元开始买入,得到0.7×9.5×0.16=1.064美元,从而获得6.4%的利润。 给定n种货币c1 ,c2 ,… ,cn的有关兑换率,试设计一个有效算法,确定货币间是否存在套汇的可能性。提示:判断图上是否出现正环,即环上所有的边相乘大于1输入第一行:测试原创 2020-11-23 22:05:00 · 1502 阅读 · 2 评论 -
c++ 不足位数补足某个字符的方法
#include<iostream>#include <iomanip>using namespace std;int main(){ int a; cin>>a; cout<<setfill('0')<<setw(4)<<a<<endl; return 0;}可以看到输出结果如图所示原创 2020-09-21 17:09:13 · 2324 阅读 · 0 评论 -
c++ 输入带有空格的一行字符
string a;getline(cin,a);输入带有空格的一行字符原创 2020-09-21 17:06:12 · 756 阅读 · 0 评论 -
面向对象程序设(c++语言)string的几种可能被遗忘的好用的用法
原创 2020-09-21 17:05:21 · 73 阅读 · 0 评论 -
面向对象程序设(c++语言)重载函数的几种基本用法
#include <iostream>#include<sstream>using namespace std;class A{ int value;public: A(int a=0):value(a){} /*A operator+(A b){ value+=b.value; return (*this); } A operator+=(A b){ value+=b.value; .原创 2020-09-21 17:03:23 · 110 阅读 · 0 评论 -
c++进制转换(用栈和队列实现
**输入**第一行输入一个t,表示下面将有t组测试数据。接下来每行包含两个参数n和k,n表示要转换的数值,可能是非整数;k表示要转换的数制,1<k<=16(输出结果保留三位小数,如要修改小数点保留位数,后面有标出修改的位置#include<iostream>#include<stack>#include<queue>using namespace std;int main() { double n,decimal;..原创 2020-07-15 17:27:43 · 844 阅读 · 0 评论 -
c++ 数据结构 例题精选 DS队列--银行简单模拟
这个系列是将自己在学校学习中遇到的比较好的例题以及其算法写下来。(对于大神来说肯定不算什么,但是对于编程刚入门的我来说还是有学到新东西的)DS队列----银行简单模拟题目描述设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入输入为一行正整数,其中第1个数字原创 2020-07-15 17:19:52 · 716 阅读 · 0 评论 -
C++中输出小数点后几位的简单方法
输出小数点后几位的代码如下:#include<iostream>#include <iomanip>using namespace std;int main(){ double r = 123.56789; cout<<fixed<<setprecision(4)<<r<<endl; //输出小数点后4 return 0;}...原创 2020-07-15 17:14:12 · 10794 阅读 · 0 评论