自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 问答 (1)
  • 收藏
  • 关注

原创 堆排序--c++实现

大顶堆与小顶堆的概念大顶堆:每个节点的值都大于或等于其他左右孩子节点的值。小顶堆:每个节点的值都小于或等于其他左右孩子节点的值。堆排序过程:先将n个元素的无序序列,构建成大顶堆。 将根节点与最后一个元素交换位置 交换之后可能不再满足大顶堆的条件,所以需要将剩下的n-1个元素重新构建成大顶堆 交换过程: )先找到最后一个非叶子节点,最后一个非叶子节点为:(长度/2-1),然后比较该节点值与他的子数值,如果该节点小于其他左右子树的值就交换。 )继续找到下一个非叶子节点,当前坐标-

2021-05-09 14:44:44 165

原创 c++中默认构造函数

编译器什么时候会产生默认构造函数?类成员中有成员是类对象,并且该成员的类含有默认构造函数,那么编译器会帮你给这个类也生成一个默认构造函数,用来调用其他成员对象的构造函数,完成该成员的初始化构造。如果这个成员的类也没有给出默认构造函数,那么编译器也不会帮你生成该类的默认构造函数。 class Qita{public: Qita() { std::cout << "其他类的默认构造函数"<<endl; }};class DefaultConstructorClass

2021-05-06 15:56:43 269

原创 c++中sizeof的大小

今天看到一个很有意思的题目,算sizeof类型的大小,题如下 char* p1 = NULL; cout << "p1的大小为"<<sizeof(p1)<<endl; const char* p2 = "Hello"; cout << "p2的大小为" << sizeof(p2) << endl; const char* p3[] = { "Hello", "World" }; cout <&lt

2021-05-06 14:44:41 260

原创 c++之运算符重载

今天写了一个类string来模拟实现string,其中进行了常用的运算符重载。分别对+,=,==,<,>,[]进行了重载#pragma once#include <string>class Cstring{public: //默认构造函数 Cstring() { this->m_s = new char('\0'); } Cstring(char* s) :m_s(s){} Cstring(const char* s){ m_s = new cha

2021-05-05 21:46:44 72

原创 如何使用git将本地文件夹上传到github/修改后的文件如何再次上传

分两种情况,一种是新的文件夹,从未上传过github;一种是之前上传过,但对里面的内容进行了修改,将修改的上传。第一种情况,从未上传过,即新的文件夹。(1)打开一个文件夹,右键打开git bash here(2)通过命令git init 把这个目录变成git可以管理的仓库;git init完成这一步之后当前文件夹下会出现这一文件夹(3)把文件添加到版本库中,使用命令git add .添加到暂存区里面去.(4)用命令git commit 告诉Git,把文件

2021-05-04 17:24:40 1629

原创 c++中指针的例子/上海擎朗智能面试题

今天去了擎朗智能面试,面试问到了很多指针的题,整理一下。1.下面程序有没有错,有的话是什么错?void test(){ char* str ="Linux"; *str = 'T'; printf("%s", str);}在c++中,vs2019中将“linux”初始化char*会报错,“linux”是const char*不能转为char*改正的话,先将“linux”保存在一个数组中,用指针指向这个数组。如下所示,则会有如下输出:void test(){

2021-04-29 16:29:54 253

原创 c++中const在修饰对象参数时与修饰函数本身的区别

const在函数时,主要包括两个方面的内容,一是修饰参数里面的对象,二是修饰函数(1)当对象以值传递的方式进行传递时,参数前面加const,则不能在函数体的内部试图对对象的成员变量进行修改,否则会报错。(2)当对象以值传递的方式进行传递时,参数前面不加const,可以对对象的成员变量或者成员函数进行修改,修改的有效范围只是在当前函数内部有效,在脱离函数外部的对象并不进行修改,还是会保持调用函数之前的值。(3)当const修饰函数,即在函数的后面加const时,在函数体内部可以对对象的成员变量或者

2021-04-28 13:25:42 163

原创 c++中使用protobuf进行序列化

目录序列化定义:为什么需要进行序列化?序列化的过程c++中常见的序列化方式protobuf的操作流程protobuf的使用举例(1)在.proto文件中定义消息格式(2)repeated限定修饰符(3)枚举(4)proto文件的导入(5)包 -> 命名空间(6)使用protobuf编译器生成C++类(7)vs配置 -> 添加宏序列化定义:就是将对象的状态信息转换为可以存储或传输的形式的过程,说白了,就是将对象以值的形式进行转换成可.

2021-04-28 11:10:04 3119

原创 c++中继承,关联,组合,聚合以及依赖的区别以及UML表示

目录继承(1)普通继承关系(2)抽象继承关系关联(1)单向关联关系(2)双向关联关系(3)自关联关系聚合组合依赖继承继承也叫作泛化关系,用于描述父子之间的关系,父类又称为基类或者超类,子类又称作派生类,在uml中,泛化关系用空心三角形的实线来表示(1)普通继承关系假如定义了一个person,student 以及teacher类class Persion{public: string getName() { .

2021-04-27 22:22:02 1745

原创 插入排序之c++实现

思想:每次将待排序的数插入到已排序的合适位置。使整个序列有序。举例:每次将一个数字插入到有序数列中,直到所有的序列是有序的比如对于无序序列『4,6,8,5,9』来说代码:#include<vector>#include<iostream>using namespace std;void insertSort(vector<int>&nums,int length){ int temp; int i,j; f

2021-04-21 15:37:14 102

原创 递归实现快速排序

思想:每次排序以数组中第一个为基准base(或者以数组中最后一个为基准),从前面找到第一个比基准大的,与之交换;从后面找到第一个比基准小的,与之交换。然后分别递归排序基准前面和后面的。举例:对6 1 2 7 9 3 4 5 10 8进行排序首先找一个基准。从后往前找比基准小的,从前往后找比他大的,然后交换。代码:#pragma once#include <vector>#include <iostream>using namespace std;v

2021-04-21 15:04:26 190

原创 由十进制转二进制 位运算相关的知识

对于十进制整数 x,我们可以用 x & 1 得到 x 的二进制表示的最低位,它等价于 x % 2:例如当 x = 3 时,x 的二进制表示为 11,x & 1 的值为 1;例如当 x = 6 时,x 的二进制表示为 110,x & 1 的值为 0。对于十进制整数 x,我们可以用 x & (1 << k) 来判断 x 二进制表示的第 k 位(最低位为第 0 位)是否为 1。如果该表达式的值大于零,那么第 k 位为 1:例如当 x = 3 时,x 的二

2021-03-19 09:29:55 528

原创 leetcode之每日一题767重构字符串之最大堆和c++11lambda解决问题

题目描述:给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。示例1:输入: S = "aab"输出: "aba"示例 2:输入: S = "aaab"输出: ""刚看到这个题,就觉得直接用一个数组记录下S每个字符出现的次数,不可以重构的原因无非就是一个字符出现的次数大于一个阈值,若S的长度为偶数时,阈值为长度的一半,若S的长度为奇数时,则阈值为长度加1的一半,超过这个阈值则不能重构。能重构的情况下.

2020-11-30 10:41:22 161

原创 leetcode每日一题之生命游戏(数组找相邻八个数字的方法)

题目描述:根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活细胞周围八个位..

2020-11-26 13:23:53 170

原创 c++智能指针及其实现

使用一个辅助类,成员函数全部私有,对智能指针类友元,只有智能指针类可以对其操作,辅助类含有两个数据成员:计数count与基础对象指针(模板)智能指针类用引用计数来实现,将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。具体做法如下:当创建类的新对象时,初始化指针,并将引用计数设置为1 当对象作为另一个对象的副本时,复制构造函数复制副本指针,并增加与指针相应的引用技术(加1) 使用赋值操作符对一个对象进行赋值时,先使左操作数的指针的引用计数减1(因为指针已经指向别的...

2020-11-25 17:24:38 121

原创 回溯法之括号

题目描述:括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。说明:解集不能包含重复的子集。例如,给出n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]#pragma once#include "common.h"//left表示可使用的左括号数,right表示可使用的右括号数void backtrack(vector<string>& re...

2020-11-24 08:58:09 142

原创 c++中智能指针的使用

目录auto_ptrunique_ptrshare_ptr成员函数:share_ptr组weak_ptr智能指针的作用:C++中,不可避免程序还未执行到delete时就跳转了或者在函数中没有执行到最后的delete语句就返回了,如果我们不在每一个可能跳转或者返回的语句前释放资源,就会造成内存泄漏,使用智能指针可以很大程度上避免这个问题,因为智能指针就是一个类,当超出了类的作用域时,类会自动调用析构函数,析构函数会自动释放资源。auto_ptr例子://官方代码

2020-11-23 20:53:58 300

原创 leetcode每日一题之452:用最少数量的箭引爆气球

题目描述:难度:中等在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得..

2020-11-23 09:09:06 224

转载 状态机的一个例子

今天刷题的时候看到一个状态机实现的例子。题目如下:题目描述我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径:1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello3. 上.

2020-11-21 23:31:42 608

原创 数据转换对比

自动类型转换(隐式)特点: 代码不需要进行特殊处理,自动完成规则: 数据范围从小到大 安全性:安全 强制类型转换特点:代码需要进行特殊的格式处理,不能自动完成格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据安全性:不安全...

2020-11-21 23:28:52 95 1

原创 二分法--一个例子

题目描述shopee的零食柜,有着各式各样的零食,但是因为贪吃,小虾同学体重日益增加,终于被人叫为小胖了,他终于下定决心减肥了,他决定每天晚上去操场跑两圈,但是跑步太累人了,他想转移注意力,忘记痛苦,正在听着音乐的他,突然有个想法,他想跟着音乐的节奏来跑步,音乐有7种音符,对应的是1到7,那么他对应的步长就可以是1-7分米,这样的话他就可以转移注意力了,但是他想保持自己跑步的速度,在规定时间m分钟跑完。为了避免被累死,他需要规划他每分钟需要跑过的音符,这些音符的步长总和要尽量小。下面是小虾同学听的歌曲的音

2020-11-21 23:27:09 519

原创 0-1背包问题--动态规划

F(n,C)考虑将n个物品放进容量为C的背包,使得价值最大F(i,C)=F(i-1,c)(不选择 i 物品)=v(i)+F(i-1,c-w(i))(选择 i)两者选最大者。F(i,c)=max(F(i-1,c),v(i)+F(i-1,c-w(i)))

2020-11-21 23:26:14 534

原创 vs2019项目上传github

1.打开vs,扩展->管理扩展->联机->搜索框搜索github如下图所示;点击安装2.安装好之后重启,点击视图下面的团队资源管理器3 选择github,输入登录账号和密码,连接4.若有项目,则在项目下面选择源代码管理器,若下面没有,则将解决方案添加到源代码管理5.选择发布到github6.输入自己的账号以及项目名字,点击发布。7.若本地的项目进行了更新,只需要进行同步操作就可以,比如将本地的sample code进行更新,则双击打开,点击.

2020-11-21 22:10:22 1404 2

原创 vector中push_back与insert在插入一个元素时区别

在c++中,两者都表示添加,其中push_back()表示在vector的末尾元素添加一个元素,而insert可以在某个位置添加一个元素例子如下:vector<int>v = { 4,5,6 }; v.push_back(2); for (int i = 0; i < v.size(); i++) { cout << v[i] << ","; } cout<<endl; //在位置2处添加10,原来位置上的值往后顺延 v

2020-11-21 16:32:19 4049 1

原创 分布式存储Ceph技术

Ceph简介Ceph架构Ceph的基本组件Ceph结构Ceph存储种类及其应用场景块存储文件存储对象存储 Ceph工作原理

2020-11-20 13:32:17 273

原创 分布式存储概念及特点

应用访问存储的方式包括:基于块访问,基于文件访问,基于对象访问。 传统存储与分布式存储的区别:传统的NAS或SAN存储解决方案绑定至昂贵的专有硬件,软件定义型存储通常设计为使用现成的存储驱动器和设备,花费要低于传统的存储设备,软件定义型存储是一个软件层,在物理存储设备和数据请求之间提供一个抽象层,借助这一抽象层,可以更加轻松地实施存储虚拟化等功能,让许多基础存储设备和服务器池化为一种虚拟存储空间。以各种方式冗余的使用存储来提供弹性和容错能力存储虚拟化可以让软件定义型存储解决方案横向扩展,以支持PB级...

2020-11-20 11:25:50 3818

原创 查找二维数组每一行中的最大值和每一列的最大值

[ [3, 0, 8, 4], [2, 4, 5, 7], [9, 2, 6, 3], [0, 3, 1, 0] ]找这个数组的行中最大值和列中的最大值 int n = grid.size(); int m = grid[0].size(); vector<int>col(n, 0); vector<int>row(m, 0); //找出每行中的最大值 for (int i = 0; i < n; i++) { r.

2020-11-19 21:01:35 5563

原创 c++中异或的妙用

异或运算的性质:任何一个数字异或它自己都等于0。也就是说,如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字,因为那些出现两次的数字全部在异或中抵消掉了。例题:编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。输入: numbers = [1,2]输出: [2,1]class Solution {public: vector<int> swapNumbers(vector<int>&

2020-11-19 19:33:47 759

转载 简述C++中map和unordered_map的用法

1. 简介map和unordered_map都是c++中可以充当字典(key-value)来用的数据类型,但是其基本实现是不一样的。2. map对于map的底层原理,是通过红黑树(一种非严格意义上的平衡二叉树)来实现的,因此map内部所有的数据都是有序的,map的查询、插入、删除操作的时间复杂度都是O(logn)。此外,map的key需要定义operator <,对于一般的数据类型已被系统实现,若是用户自定义的数据类型,则要重新定义该操作符。map的基本操作如下#include&

2020-11-19 13:49:52 1781

原创 c++中lower_bound()与upper_bound()的用法

所使用的库函数:#include <algorithm>所表示的含义:lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。upper_bound(起始地址,结束地址,要查找的数值) 返回的是 第一个大于待查找数值 出现的位置。https://www.cnblogs.com/Tang-tangt/p/9291018.html示例代码:#include <iostream>#include <algorithm>

2020-09-30 20:54:29 661

原创 微众银行笔试题2020年秋招测试岗位矩形旋转与翻转题目

微众银行笔试题题目描述新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入题目描述你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下

2020-09-29 22:01:51 903

原创 c++中结构体的一个应用

今天刷题的时候刷到一个题,在我纠结用map时,发现在输出的时候很是麻烦,这时候看到了结构体,题目如下:题目描述输入描述:输出描述:示例1输入4math 100 90algorithm 10 8string 50 1dp 100 50输出algorithm 3dp 4math 3string 5题目中有三种类型,并且三种类型是绑在一起的,一个题目的名称与他的提交次数,通过次数是绑在一起的。如果不用结构体的话,想绑在一起,也可以用map,这里上一下结构体的实现:#incl

2020-08-18 10:49:24 112

原创 c++中double与float的区别

(1)float f=3.4;是否正确?答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。(2)问题:什么时候用float 什么时候用double类型? 1)声明:float a = 1.1f; double a = 1.1;也就是说,后面不加f的话,默认就是double。如果用flo...

2020-08-17 22:23:28 5453 7

原创 c++中如何统计一个字符串中各个字符各有多少个

今天刷题的时候遇到一个题,需要将字符串中的各个字符的个数统计起来。比如:将字符串s中各个字符的个数统计起来并按从大到小排列。int cnt[30];int cmp(int a,int b){ return a>b;}int main(){ int n,k; while(scanf("%d %d",&n,&k)==2){ scanf("%s",s); memset(cnt,0,sizeof(cnt)); f

2020-08-17 20:33:01 5164 1

原创 辗转相除法求最大公约数与最小公倍数之和

辗转相除法求最大公约数,然后通过最小公约数求最大公倍数

2020-08-13 16:51:48 102

空空如也

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

TA关注的人

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