C++
文章平均质量分 61
主要是一些C++课程的概念和习题
Rea0916
你受的苦终将照亮夜行的路
展开
-
【面试复习】
面试复习P2P下载器项目1、C和C++的区别2、程序编译链接的过程3、重载、重写、重定义的区别4、你对MySQL的索引是如何理解的5、什么是事务6、数据库的锁7、什么是存储过程?8、什么是数据库的内外连接?9、内存分配的方式10、面向过程和面向对象的理解11、什么是自动化测试?自动化测试的场景12、unordered_map和map的区别13、多态的实现原理14、排序算法的时间复杂度和空间复杂度1.........原创 2022-07-27 14:38:29 · 513 阅读 · 0 评论 -
【C++】——内联函数、const的思维导图
inline内联函数const 用法原创 2022-07-27 14:30:10 · 144 阅读 · 0 评论 -
【C++】--工厂模式
什么是工厂模式?一句话概括:提供一个创建对象的接口,根据需求创建不同的子类对象工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式简单工厂模式一个工厂,多个产品,产品需要有一个虚基类,通过传入参数,生成具体产品对象,并用基类指针指向该对象c++代码:#include <iostream>#include <stdlib.h>using namespace std;class product{public: virtual void show() =原创 2021-03-04 20:44:13 · 255 阅读 · 0 评论 -
【C++】 ——C++单例模式中的饿汉和懒汉模式
单例模式一、 单例模式的定义二、 单例模式的懒汉模式三、 单例模式的饿汉模式r四、 单例模式的应用场景二级目录三级目录一、 单例模式的定义单例模式是一种常见的软件设计模式。它的核心结构质保函一个被称为单例的特殊类。它的目的是保证一个雷仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。二、 单例模式的懒汉模式咱先记住第一句话:第一次用到类的实例的时候才回去实例化三、 单例模式的饿汉模式咱再记住第二句话:单例类定义的时候就进行实例化r四、 单例模式的应用场景二级目录三级目录原创 2020-05-24 22:53:07 · 5414 阅读 · 10 评论 -
【LeetCode题解】 ——用O(nlogn)的时间复杂度对链表排序(归并排序)
常数级时间复杂度对链表排序(为什么写这个题呢?因为恰好我们可以复习下排序算法的时间复杂度),题中要求时间复杂度为O(nlogn),显然从下表可以看出来归并排序和堆排是可以实现的,这里我采用归并排序的方法说一下思路。思路:我们先利用快慢指针的方法,找出链表的中间节点,然后对左右两个部分分别做同样的操作,直到剩下一个元素,那元素就是有序的。最后再将有序的数组归并。我这里解释一下这段代码:这个是将两个链表归并起来意思(只是完整代码的一部分),比如list1=1->4; list2=3,我们顺着原创 2020-05-19 13:34:50 · 539 阅读 · 0 评论 -
【牛客题解】 ——二叉树的下一个节点
二叉树的下一个节点题中给出的指向父亲节点的指针,用next表示,有点会让人误解。思路:我们以以下这棵二叉树为例,中序遍历为{D,B,H,E,I,A,F,C,G}把很容易可以发现,如果要找一个节点的下一结点,比如说是B节点的下一结点,我们首先看B的右树是不是为空,如果不为空,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点,在这里B的下一个节点是H;无右子树,且结点是该结点父结点的左子树,则下一结点是该结点的父结点,例如 H,下一结点是 E无右子树,且结点是该结点父结点的右子树,则我们一直原创 2020-05-16 22:06:30 · 278 阅读 · 0 评论 -
【Linux】 ——重新理解进程和线程
进程一、进程与线程二、进程是什么?2.2、描述进程PCB2.3、Linux下查看进程信息常用命令总结2.4、进程的状态三、线程是什么?四、进程和线程的区别一、进程与线程我感觉要想说好进程和线程的区别,是一个既简单又困难的问题,如果简单的记得“进程操作系统资源分配的基本单位,线程是CPU调度的基本单位”,很难让自己的能力得到提升。因为学计算机的应该百分之九十都记得这句话吧。我先给你看看关于进程这一节的思维导图(图片不清晰的话,可以先保存再看,图侵删),句句都是重点有没有二、进程是什么?先回忆下程序,原创 2020-05-16 00:43:55 · 420 阅读 · 0 评论 -
【C++】 ——亿级数据过滤之布隆过滤器
大数据处理之布隆过滤器一、布隆过滤器二、布隆过滤器的原理三、布隆过滤器不支持删除四、布隆过滤器的使用场景一、布隆过滤器秉承着学习的态度,博主对布隆过滤器产生了很大的兴趣,它适用于大数据处理,比如垃圾邮件过滤,电话黑名单,URL去重,网页黑名单等都“宁可错杀一千,也不放过一个”,这是布隆过滤器的特点,也就是说我们利用布隆过滤器判断这一邮件是垃圾邮件一定就是准确的,也有可能将有效邮件判断称垃圾邮件,布隆过滤器存在误判的可能。接下来,我们就来看看布隆过滤器的原理。二、布隆过滤器的原理在这之前,我们考虑一原创 2020-05-10 16:07:26 · 617 阅读 · 0 评论 -
【牛客题解】 ——表示数值的字符串
表示数值的字符串思路:设置三个标志位sign表示是否含有正负号,symbol表示是否含有小数点,hasE表示是否含有e或者E(1)如果第i位是e或者E,那它一定不能是最后一个字符,将标志位hasE设为ture(2)如果第i位是 - 或者 + ,如果之前已经有 - 或者 +,那必须在e或者E的后面,如果不是的话就返回false;如果之前没有,判断是不是出现在第一位,如果不是第一位,那也必须在...原创 2020-05-07 20:56:30 · 237 阅读 · 0 评论 -
【C++】 ——剑指offer的矩阵问题
1、矩阵中的路径思路:题目很容易理解,给你一个字符串和一个字符矩阵,判断这个字符串是否在矩阵中。我们先用一个标志数组来判断该位置是否被访问过。1代表访问过,0表示没有求出元素的在数组的位置,index=i*cols+j;如果我们要用递归,那终止条件就是i,j小于0,要么就是i,j越界(超出cols和rows的范围),要么就是str[k]和数组元素不相等,要么就是数组的这个位置之前访问过。...原创 2020-05-02 15:45:40 · 183 阅读 · 0 评论 -
【C++】 ——最长无重复子串
最长无重复子串思路1:利用滑动窗口,先开辟一个数组,里面存放字符串中每个字符出现的次数。如果s[i]第一次出现,那就把窗口后沿向后移动,若s[i]出现第二次,就把它的计数减1,同时窗口前沿移动一位。#include<iostream>using namespace std;#include <string>#include <stdlib.h>#...原创 2020-05-01 21:43:07 · 647 阅读 · 0 评论 -
【剑指offer】——剪绳子
剪绳子(这段时间写了很多题,剑指offer快写完了,算法我真的…看到算法题就不想写,但是想了下,觉得自己不能一直这么逃避,该学的还得学,过程总是要经历的,就看了道关于动态规划的题)思路:当绳子的长度小于2的时候,就返回0;绳子长度等于2时,返回1(1x1=1);当绳子长度等于3,返回2(1x2=2);设dp[1]=1,dp[2]=2,dp[3]=3,(注意,这个数组不包含前面几种情况)剩下的...原创 2020-04-28 15:39:36 · 192 阅读 · 0 评论 -
【C++】 ——C++11新特性之智能指针
C++11智能指针一、引入智能指针的重要性二、智能指针的原理2.1 RAII2.2 智能指针的原理三、C++库中的智能指针3.1 auto_ptr3.2 unique_ptr3.3 shared_ptr四、总结一、引入智能指针的重要性关于智能指针,其实是C++11的一种新的特性,记住一句话:它主要是解决内存泄漏问题,因为智能指针是一个类,当超出了类的作用域之后,类就会自动调用析构函数,析构函数...原创 2020-04-28 10:43:53 · 667 阅读 · 0 评论 -
【Linux】——应用层中的HTTP协议
一、HTTP协议介绍我发现HTTP协议要想真的搞明白的话,那真的是这一两篇博客是写不完的。因为HTTP协议的请求方法很多,头部信息也很丰富,要想全部记住和区分请求方法,还是要花点时间的。还有HTTP和HTTPS的区别等都是面试常考点。1.1 HTTP协议概要HTTP(Hypertext Transfer Protocol),超文本传输协议,允许用户通过单击链接访问资源。如下图所示,HTTP协...原创 2020-04-28 10:37:16 · 253 阅读 · 0 评论 -
【牛客题解】 ——序列化二叉树
序列化二叉树(能看懂这个题的都是大佬…我太菜了…)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/cla...原创 2020-04-26 14:34:18 · 214 阅读 · 0 评论 -
【C++】——快速排序(前后指针,挖坑法,快慢指针法)
一、前后指针法基本思路:1.将数组的最后一个数right作为基准数key。2.分区过程:从数组的首元素begin开始向后找比key大的数(begin找大);end开始向前找比key小的数(end找小);找到后然后两者交换(swap),知道begin >= end终止遍历。最后将begin和最后一个数交换( 这个时候end不是最后一个位置),即 key作为中间数(左区间都是比key小的数...原创 2020-04-26 00:32:15 · 1400 阅读 · 1 评论 -
【Linux项目】 --P2P下载器的详细介绍
一、P2P下载器功能简介P2P下载器是一个可以跨Windows和Linux平台的P2P下载器项目,客户端通过搜索出与之相连的主机,与指定主机建立连接请求,获取共享文件列表,发送文件下载请求,服务端对客户端的请求做出响应,最终实现不同主机间共享文件的目的。客户端: 1.查看网络中的共享主机,向网络中广播配对请求,得到相应在线主机列表 2.选择一个主机获取文件列表,向指定主机发送获取列...原创 2020-04-23 14:11:22 · 6830 阅读 · 3 评论 -
【牛客题解】 ——之字形打印二叉树
之字形打印二叉树(我以为跟此次遍历二叉树一样那么简单,发现人家这个题貌似比层次遍历高一个level)思路:利用队列,队列中出一个元素,就把它的左右孩子带进去,不过先开始得设置一个标志位为false,表示他不是从左往右打印的,每一个层次遍历完,都改变falg的值,falg为false,那就翻转/*struct TreeNode { int val; struct TreeN...原创 2020-04-22 22:17:10 · 166 阅读 · 0 评论 -
【牛客题解】 ——判断一棵树是否为对称二叉树
判断一棵树是否为对称二叉树(对不起,我第一次做这个题的时候,写的太复杂了…不断的调用函数)思路一:先找出这个二叉树的镜像,再判断两个二叉树是否为同一个二叉树,但是这又涉及到一个问题,你得先把原来的二叉树保留下来,才能传到求镜像的函数,不然原来的树就改变了,所以要用另一个拷贝函数。/*struct TreeNode { int val; struct TreeNode *l...原创 2020-04-22 13:40:54 · 277 阅读 · 0 评论 -
【牛客题解】 ——正则表达式的匹配
正则表达式的匹配(我说大晚上看这个,锻炼人的思维…你信吗?)思路:1、两个都为空,返回真2、第一个为空,但是第二个不为空,返回假(如果第一个为空,但是第二个不空,是有可能返回真的,比如 “” 和 “.")3、pattern中当前位置的下一个不是“ * ”,如 bc 和 cd ,直接比较当前位置,能够匹配就继续配下一个,不匹配,直接返回false; 如果pattern的下一个是“ * ”...原创 2020-04-21 23:48:18 · 593 阅读 · 0 评论 -
【剑指offer】 ——构建乘积数组
构建乘积数组(我是一个没有感情的刷题机器)思路:把数字写一遍找出规律B[0] = A[1] *A[2] * A[3]…*A[n-1]B[1] = A[0] *A[2] * A[3]…*A[n-1]B[2] = A[0] *A[1] * A[3]…*A[n-1]看出来没?要是你要求B[i] ,后面的乘积就不要包含A[i]这一项了,当然意思就是说直接乘以1就好了。class Solut...原创 2020-04-21 15:57:02 · 149 阅读 · 0 评论 -
【牛客题解】 ——数组中重复的数字
(我觉得这个题很奇葩,所以写了,答案就返回了一个数字,不晓得为什么参数给的是int* 类型,满脸问号???并且要找的是数组中第一个重复的元素,意思就是说你找到重复数字,不仅要返回 true,还要把这个数字存到int* 的数组里面)思路:用map就很方便,first存放数据,second存放数字出现的次数class Solution {public: // Parameters: ...原创 2020-04-20 12:54:10 · 199 阅读 · 0 评论 -
【牛客题解】 ——把字符串转换成整数
这道题很简单,我昨天写的时候,没注意越界,第一次写用例只通过百分之八十五,我的天,查个越界查一个小时,算了,做出来就好,特别注意的是要先声明res为long long类型,不然就会越界思路:从后向前遍历字符串,直到遍历到str[0]停止,再单独判断str[0]class Solution {public: int StrToInt(string str) { ...原创 2020-04-20 12:05:08 · 250 阅读 · 0 评论 -
【牛客题解】 ——不用加减乘除做加法
不用加减乘除做加法思路1:第一步首先对两个数做异或操作(相同为0,不同为1),第二步计算进位,如果有进位,那就左移一位,和第一步所得的数继续做异或操作,直至进位为0;class Solution {public: int Add(int num1, int num2) { int temp; while(num2) { ...原创 2020-04-20 00:14:26 · 186 阅读 · 0 评论 -
【C++】——C++深浅拷贝以及写时拷贝的理解(调试+代码)
深浅拷贝和写时拷贝(最近好烦哦,觉得自己状态不是很好,复习的效率也不是很高,刷个LeetCode,人家写个递归,我觉得自己得想好久,调试好久,还不一定完全理解,事情也太多了)今天上课的时候,老师说深浅拷贝这个是高频考点,行吧,看不懂递归,我来看点自己可以理解的。1、浅拷贝比如说,现在有一个对象A,需求是将 A 拷贝给对象B,当B拷贝了A的数据后,当B的改变会导致A的改变,此时叫做B浅拷贝了A...原创 2020-04-19 20:42:53 · 270 阅读 · 0 评论 -
【牛客题解】 ——圆圈中最后剩下的数
圆圈中最后剩下的数我发现我太笨了,只能用循环队列解决!!!解法一:class node { public: int num; node* next; node(int num) { this->num=num; } };class Solution {pu...原创 2020-04-19 01:03:23 · 169 阅读 · 0 评论 -
【C++】 ——指针和引用的区别、数组和链表的区别
1、指针和引用的区别都是地址的概念,指针指向的是一块内存,它的内容是内存的地址,但是引用是一块内存的别名。区别:指针是一个实体,但是引用仅仅是别名引用使用时,无需解引用(*),但是指针需要解引用引用只能在定义的时候被初始化一次,之后不可改变,但是指针可变引用没有const,但是指针有const引用不能为空,但是指针可以为空sizeof引用的时候得到的是所指向变量(对象)的大小,但...原创 2020-04-18 23:32:14 · 549 阅读 · 0 评论 -
【C++】 ——继承的三种方式比较以及继承中小的知识点
继承1、public、protected、parivate修饰类的成员2、 public 、protected、private指定的继承方式说明3、 基类与派生类对象赋值的转化4、继承中的隐藏5、隐藏、重载、重写(覆盖)的区别6、友元与继承C++继承的一般语法为:class 派生类名:[继承方式] 基类名{ 派生类新增的成员};继承方式限定了积累成员在派生类中的访问权...原创 2020-04-17 16:22:25 · 564 阅读 · 0 评论 -
【LeetCode 78】 ——求子集 (两种解法)
求子集思路一:(一切尽在调试中,一个一个的把它带出来,我不知道咋说,反正就是那么个意思,但要注意的是最先开始要给存放结果的vector一个空间)class Solution {public: vector<vector<int>> subsets(vector<int>& nums) { vector<vect...原创 2020-04-16 23:55:26 · 333 阅读 · 0 评论 -
【C++】 ——全排列算法
关于全排列算法,分为两种:可重复的全排列和不包含重复的元素的全排列一、含重复元素的全排列算法思路:(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);(2)出口:如果只有一个元素的全排列,则说明已经排完(3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等待出口,出口出去后还需要还原数组#include <iostream&g...原创 2020-04-16 13:42:31 · 1448 阅读 · 2 评论 -
【牛客题解】 ——和为S的连续正数序列
和为S的连续正数序列(今天看这个题把我给看急了,我就觉得应该用回溯,结果半天没写出来,怀着无比难过和沉重的心情看了大家都管他叫左神的大佬的解题思路,我的天,聪明的人的脑子果真跟我长的不一样,这下更难过了,非得看懂自己写出来才肯睡觉,默默埋怨一句,我咋就没有这么聪明呢)思路:这个题其实就是一个等差数列的求和问题,大佬的解法是设置一个窗口,通过计算窗口前沿和后沿之间的数的和(题中说数字是连续的,...原创 2020-04-16 00:28:56 · 228 阅读 · 0 评论 -
【牛客题解】 ——数组中只出现一次的数字
数组中只出现一次的数字思路一:利用unordered_map,先把数组中的数字和次数放入map中,再次遍历数组,如果次数为1,则记录结果class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { unordered_map<...原创 2020-04-15 18:49:37 · 241 阅读 · 0 评论 -
【C++】 ——判断一棵树是否为平衡二叉树的两种方法
判断一棵树是否为平衡二叉树思路一:根据求树的深度的方法,依次得到每个节点左子树和右子树的高度,再次计算每个节点其左右高度差是否满足小于等于1,若都满足返回真,若不满足返回假class Solution {public: int GetDepth(TreeNode* proot) { if(proot==NULL) return 0;...原创 2020-04-15 00:47:05 · 1613 阅读 · 0 评论 -
【牛客题解】 ——丑数
丑数(为啥我第一次看见这个题,感觉思路很简单,但就是写不出代码呢?总结了一句:就是菜,没有别的原因)思路:设置三个指针p2,p3,p5,初始值都为0设置一个存放丑数的数组vector v 的初始值为1等于说先开始就是这样的:存放丑数的数组为1乘以2的队列:2乘以3的队列:3乘以5的队列:5取队头最小的数为2,分别给每个队列的都增加一个数,就是这个最小数分别乘以2, 3,5...原创 2020-04-13 21:59:41 · 176 阅读 · 0 评论 -
【牛客刷题】 ——把数组排成最小的数
把数组排成最小的数思路:先把数组里面的数通过stringstream转成string类型的,再进行比较大小。最终返回一个stringclass Solution {public: static bool Compare(const string& s1,const string& s2) { string str1=s1+s2; ...原创 2020-04-13 18:30:31 · 165 阅读 · 0 评论 -
【牛客题解】 ——整数中1出现的次数
整数中1出现的次数思路一:迭代class Solution {public: int NumberOf1Between1AndN_Solution(int n) { int count=0; for(int i=1;i<=n;i++) { int temp=i; while(...原创 2020-04-13 13:07:33 · 174 阅读 · 0 评论 -
【C++】 ——红黑树的旋转(详细图解+附C++代码)
红黑树1、红黑树的概念2、红黑树的性质3、红黑树的插入(1)情况一:叔叔不存在(1)情况二:叔叔存在且为黑4、红黑树的代码实现1、红黑树的概念红黑树是一棵二叉搜索树所有的左孩子都小于根结点,右孩子都大于根结点红黑树是一棵基本平衡的树(左右高度差不超过1)红黑树最大深度小于等于最小深度的二倍2、红黑树的性质性质:(1)每个节点是红色或者黑色(2)根结点是黑色(3)所有叶节点是...原创 2020-04-13 00:42:25 · 915 阅读 · 2 评论 -
【C++】 ——红黑树C++完整代码
红黑树完整代码#pragma once#include <iostream>using namespace std;enum Colour{ BLACK, RED,};template <class T>struct RBTreeNode{ RBTreeNode<T>* _left; RBTreeNode<T>* _ri...原创 2020-04-13 00:39:25 · 311 阅读 · 0 评论 -
【牛客题解】 ——连续子数组的最大和
连续子数组的最大和代码:class Solution {public: int FindGreatestSumOfSubArray(vector<int> array) { if(array.size()==0) return 0; int sum=0; int max=-1000; ...原创 2020-04-12 00:34:03 · 169 阅读 · 0 评论 -
【C++】 ——迭代器失效的两种情况?
1、map的迭代器失效要想说迭代器失效问题,我们就得来看看迭代器为啥会失效?先来看一个题,很简单,就是删除map中可以被n整除的数字。可能第一眼我们这么写:#include <iostream>#include <stdlib.h>#include <map>using namespace std;typedef map<int,int>...原创 2020-04-09 20:14:36 · 2393 阅读 · 0 评论