
c++
云原生笔记
事在人为
展开
-
【博客329】利用VS来开发Linux上的C++代码
内容: 记录如何使用VS来开发Linux上的C++代码将VS连接到Linux:1、通过ssh使得VS能够连接上2、同步远程环境的头文件,此时你就可以利用vs给你提供提示,补齐等功能(vim上较难实现)3、你可以在VS上调试Linux的C++代码步骤一:配置linux环境(确保你的Linux有ssh功能,没有则需要先安装)以Ubuntu为例:安装:sudo apt-get install openssh-server启动:sudo service ssh start验证是否有ss原创 2020-07-04 23:11:22 · 501 阅读 · 0 评论 -
【博客262】C++:全特化与偏特化
内容: 回忆一下C++的语法糖全特化:为特定类型准备特化版本,函数和类都可以实现全特化,且其模板参数列表为空template<class T>void fun(T tmp){ cout << "this is all template version, the value is " << tmp << endl;}template<>void fun(double tmp){ cout << "this is s原创 2020-05-27 19:56:06 · 406 阅读 · 0 评论 -
【博客211】C++函数对象
内容: 记录c++中的函数对象函数对象:函数对象:虽然是对象,但是却可以表现出类似函数的行为实例:struct add { add(int n ) : value (n) { } int operator() (int x) { return x + value; } private: int value...原创 2020-04-25 21:26:08 · 236 阅读 · 0 评论 -
【博客210】C++编译期求值
内容: 记录C++中对于在编译器就可以求出值的情况会优先在编译期间求值代码如下:#include <iostream>using namespace std;template <int n>struct add { static const int value = n * add< n - 1 >::value;};template &...原创 2020-04-25 21:18:19 · 855 阅读 · 0 评论 -
【博客200】如何利用C++容器来根据出现频率对字符进行排序
内容: 记录一下利用C++容器来对字符根据出现频率进行排序问题:有一个字符串流,里面有很多字母,对字符串进行处理使得频率高的字符排前面,出现频率低的字符排后面。同时,字符出现的次数也要体现出来。比如:输入:dawjdwakdldawdadadadwdwdwkkwdlwadl输出:ddddddddddddwwwwwwwwaaaaaaalllkkkj代码:#include<i...原创 2020-04-12 16:44:47 · 531 阅读 · 0 评论 -
【博客198】C++:私有构造函数也可以在类外使用
内容: 无意中翻到了之前大一读的清华大学出版社的《C++程序设计》,以前刚读的时候一直有一句不理解,现在才回想起来C++单例就用的这个知识点。在对类的静态私有数据成员初始化的同时,还可以引用类的其它私有成员单例中的应用:#include<iostream>using namespace std;class Singleton{public: static Singl...原创 2020-04-12 14:12:26 · 1115 阅读 · 3 评论 -
【博客183】C++ “static_cast“ 与 “强制转换“
内容: 记录C++中的static_cast与强制转换的区别"static_cast" 与 “强制转换” 的区别一:无关类型的指针之间转换1.static_cast进行无关类型的指针之间转换:#include<iostream>using namespace std;class A{ int a;}; class B{ int b;}...原创 2020-03-20 20:13:43 · 5536 阅读 · 0 评论 -
【博客173】base64编码:一(编码原理)
内容: 记录一种用于以8bit为单位的二进制编码方法base64编码的原理:1. Base64就是基于64个可打印字符来表示二进制数据2. 编码的规则: * 把3个字节变成4个字节(3*8 = 4*6 = 24) * 每76个字符加一个换行符 * 每个计算单位由原来的8位变成6位,所以还要在每组前面加两个0 * 原文的字节数量应该是3的倍数,如果这个条件不能满足的话:...原创 2020-03-07 20:31:33 · 479 阅读 · 0 评论 -
【博客160】C++ Pimpl(Pointer to Implementation)
内容: Pimpl(Pointer to Implementation):大致译为->指向实现的指针使用Pimpl原因:1.使类的实现和类本身解耦2.让类的内部实现对于类的使用者透明解决的问题:类A的cpp文件包含了类A的h文件,其它的cpp文件也需要用到A的接口,也包了类A的h文件:关系如下:A.h <---include--- A.cppA.h <---in...原创 2020-02-09 22:41:54 · 733 阅读 · 0 评论 -
【C++】
以下为C++相关的内容:【博客71】查看编译器处理后C++函数名【博客68】使用at()和[ ]访问容器对象的差别!!!【博客67】RAII与RTTI【博客60】C++使用pair接收 “多返回值” 函数的 “返回值”【博客57】关联容器也可使用greater来改变大小排序顺序【博客56】string的erase()函数【博客53】把自定义类型放入哈希容器时,请准备你的哈希函数!【...原创 2020-01-30 22:37:31 · 408 阅读 · 0 评论 -
【博客101】使用map与unordered_map统计出现频率
内容:当我们需要统计出现的频率最高的K个某种属性的时候,比如一堆字符串中出现次数最多的前N个的这种情况,可以使用map与unordered_map来配合使用方法:1.使用unordered_map来对字符串进行次数的统计,以字符串为键,出现次数为值2.将unordered_map统计的结果插入到map中,此时map的键是出现次数,值是字符串(此时map的值可以是一个vector,存的是出现...原创 2019-11-16 21:28:15 · 1767 阅读 · 0 评论 -
【博客99】记录秋招面试 (五)
内容: 记录一次秋招以来最考验现场发挥的一次面试面试形式:视频面试面试岗位:C/C++面试问题:1.自我介绍2.C/C++哪个用得多?3.介绍项目4.介绍实习5.listen,bind,accept函数的形参和返回值,一个个函数来,每个都过一遍,问得比较细。每个形参意义,类型,返回值种类6.send和recv的返回值以及如何处理7.讲一下项目的整体工作流程8.实习期间聊聊9...原创 2019-10-22 15:44:42 · 362 阅读 · 0 评论 -
【博客97】记录秋招面试 (三)
内容: 继续记录秋招面试哈面试形式:视频面试面试岗位:C/C++开发问题如下:1.自我介绍2.选择自己一个熟悉的方向介绍3.C和C++哪个比较熟悉?4.喜欢在linux下写代码吗?5.linux用啥编译器?6.linux下如何查看一个进程?7.知道grep吗?8.C++多态知道吗?9.C++内联优点是什么?使用宏定义不也可以吗?10.知道http吗?11.知道https...原创 2019-10-22 15:19:38 · 335 阅读 · 0 评论 -
【博客96】记录秋招面试 (二)
内容: 继续记录秋招经历的面试,记录下秋招的一次终面。面试形式:电话面试面试岗位:C/C++面试问题:1.项目介绍2.项目用到了什么知识点?3.先做一道算法题吧,题目是:有一堆ip地址和ip地址段,比如192.168.0.1或者是192.168.0.5-192.168.0.10这样子的集合,有两个这样子的集合,然后你需要对这两个集合进行合并,使得合并后的ip是有序存放,并且能合并的段的...原创 2019-10-22 15:11:34 · 333 阅读 · 0 评论 -
【博客95】记录秋招面试 (一)
内容: 经历了连个月的秋招,总算在今天拿到offer来,也是一直以来比较中意的offer。终于有时间闲下来发一下面经,更新一下积攒的博客啦。今天就先发一发面经啦。先发第一篇,也是我秋招的第一次面试,当时还在实习呢,也是我至今为止面试问得比较细的一次了面试形式:电话面试面试岗位:C/C++面试问题如下:1.先自我介绍2.问C/C++哪个用得比较多3.讲讲C++多态原理和举例一个适用的场...原创 2019-10-22 15:05:58 · 361 阅读 · 0 评论 -
【博客55】C++ string的clear()函数的真面目!
内容: 记录下看到关联容器和非关联容器的clear()的差别后,我对string的clear()还没怎么使用过,于是我就测试了一番,果然也不是真的删除!下面我来一一剖析吧。测试一:string的内容放在哪里?结果:其实string的内容是放在内部的一个指针中的,可以通过Myptr函数来得到。或者直接引用他的ptr数据成员。测试二:调用clear()的结果是什么?结果:删除所有元素(...原创 2019-05-16 19:16:25 · 28159 阅读 · 13 评论 -
【博客53】把自定义类型放入哈希容器时,请准备你的哈希函数!
内容: 今天记录下,当你使用哈希容器,并且键值是一个你自己定义的类类型的时候,你需要为它准备好哈希函数,用于映射。当然,除此之外,你也要准备好operator==函数,以供比较使用。测试:没有为自定义类型准备哈希函数时:结果:编译错误解决方法:准备好你的哈希函数和operator==,代码见下方图注意: 定义好你的哈希函数之后,紧接着实例化哈希容器的模板,最后使用时,记得要将它...原创 2019-05-11 14:23:33 · 461 阅读 · 0 评论 -
【博客51】使用malloc(0)和malloc(-1)会怎么样?
内容: 今天测试下,malloc(0)和malloc(-1)在不同的环境下使用会怎么样对malloc(0)的使用,我在看书,书中提到能得到一个非空指针,但是对它free对出错。那么实际结果是怎么样的?看代码吧。情况一:vs下测试malloc(0)结果:此时测试出来p为不为空,而且对p使用free并不会出错。但是不能使用p,如果使用p来改写其指向的内存区域,则会出现错误。情况二:vc下测试...原创 2019-05-10 22:56:36 · 1822 阅读 · 6 评论 -
【博客50】警惕:多语句宏的使用!(下)
内容: 今天记录下多语句宏的使用时的问题,继续上一篇提到的,多语句宏使用大括号来避免出现下面的问题:此时在配合if使用的情况下,exit(1)无论如何都会执行,继而产生错误结果。那么我们可以用增加大括号来解决这个问题。那么此时又会引发其他的问题,见下面代码:分析:此时当你使用的 if 跟了 else 的时候,又因为多了个;而使得else的匹配出现问题。所以不建议使用多语句宏,而应该用内...原创 2019-05-10 18:53:27 · 302 阅读 · 0 评论 -
【博客56】string的erase()函数
内容: 在上一篇博客中,我记录了string的clear()的实际工作原理,接下来我们看看erase和clear()有哪些相似处呢?测试一:其实erase()在不传入参数的时候,就是clear()了我们先看下clear():再看下erase()单个形参的情况:分析:其实erase函数在不设置参数的时候,默认是0,那么此时调用_Eos(0),那么跟clear()函数的工作过程是一样的。那...原创 2019-05-16 19:56:35 · 689 阅读 · 0 评论 -
【博客45】char转换为int时的符号位扩展问题
内容: 记录下char型转换为int型时,符号位扩展的问题先看下例码:此时我们希望得到的结果是正数,因为80是一个正数,char扩展为int后,应该结果是80.结果:分析:此时跟我们想象的不一样,因为char像int扩展时,还有一个要考虑的就是符号位问题。0x80的二进制表示为:10000000,那么最高位为1,此时扩展为int后,扩展出来的位会按照char类型的符号位来进行扩展,会...原创 2019-05-07 22:28:06 · 1350 阅读 · 8 评论 -
【博客49】警惕:多语句宏的使用!(上)
内容: 今天记录一下多语句宏可能会引发的不好发现的问题。有时候定义这个宏的目的,是为了方便替换,但是在有些场合却会带来不正确的结果。代码:代码中定义了一个用于异常处理的宏,当所需要的变量为负数的时候,就打印异常后退出。来看看执行结果吧!结果:能达到我们的目的,当我们给i赋值-1的时候,能够正常发挥宏的作用,打印异常后退出。那么当我们给i赋值一个正数的时候,是什么情况呢?结果:分...原创 2019-05-10 12:49:25 · 378 阅读 · 0 评论 -
【博客54】奇妙方法解:“找数组中只出现一次的数字“
内容: 记录下之前做的一道leetcode题目,在评论区学到了一种很新奇的解法,让我实在佩服大佬们的思维。题目:我的解法:题解思路:将int的32个位的每个位出现的次数叠加起来,然后因为大部分数字出现了三次,只有一个出现一次,那么将每个位出现的总次数对3求余,剩下的就是只出现一次的那个数的位了。leetcode上大佬的解法:一开始看不出是在干什么,但是在纸上画一下就知道了。我帮大家...原创 2019-05-14 19:33:59 · 393 阅读 · 0 评论 -
【博客89】考虑为你的inline函数加上static
内容: 最近空闲时间在gitchat上看了一些linux相关的课程,也学到了一些新的知识和一些新的建议。今天分享一个:为什么很多代码在inline函数定义前面加了static呢?在gitchat上举例了一些linux内核相关的代码,这些代码在头文件中定义了内联函数,而且在定义的时候加上了static修饰它,那么为什么这样做呢?文中给出了linux作者的解释:理解内联函数: 一个内联函数,...原创 2019-08-04 19:20:47 · 601 阅读 · 0 评论 -
【博客44】“初始化列表赋值“ 优于 “构造函数内赋值“
内容: 记录下,在使用类的构造函数初始化类对象时,使用初始化列表来初始化会好一点,比在构造函数里面初始化更好。情况一:不使用初始化列表分析:此时会先完成对b对象的初始化,b中的a成员会先赋值给一个默认值,接下来再A的构造函数里面对其值进行覆盖。情况二:使用初始化列表分析:此时会将value这个值直接传递给b的构造函数,此时b对象的构造函数一开始就是使用value来赋值给a成员,后续不...原创 2019-05-07 14:26:48 · 384 阅读 · 0 评论 -
【博客57】关联容器也可使用greater<int>来改变大小排序顺序
内容: 记录下使用greater可以使排序的默认顺序从由小到大改为由大到小。(使用less就是有小到大,不过一般默认的就是有小到大)使用一:less和greater配合sort使用结果:使用二:配合容器一起使用默认情况:使用greater的情况:使用原因:当你遇到一种情况,需要求出所有单词中,出现次数最多的K个单词,这时候你可以先用unordered_map来统计好各个单...原创 2019-05-17 12:59:22 · 654 阅读 · 0 评论 -
【博客60】C++使用pair接收 “多返回值“ 函数的 “返回值“
内容: C++中有的函数返回值不止一个,这时候如果你对几个返回值都需要,那么你要创建pair去接收它,因为函数其实没有办法真的返回来多个返回值,而是函数也是返回一个pair的。这种情况在STL容器使用中,尤为多见。代码:我以map的插入为例子假设你现在要对你的map对象,my_map进行插入,你可以使用下列语句:情况一: 如果你要获得新插入的元素对应的迭代器呢?可以使用下列语句:情况二...原创 2019-05-18 18:47:56 · 4281 阅读 · 0 评论 -
【博客11】调用vector的insert时的 “死循环“
**内容:**今天记录下如果不了解vector的insert函数的工作原理,那么很容易写出让程序陷入死循环的情况,并且你可能都发现不了原因在哪里。下面给出错例和分析测试代码:测试结果:结果分析:此时陷入了死循环,原因是你在3前面插入2,插入之后迭代器会指向新插入的元素,那么迭代器会指向2,然后for循环中对迭代器进行自增后,迭代器又指向3,然后又重复上述的操作,这时候会陷入死循环,而且更...原创 2019-04-16 19:50:11 · 552 阅读 · 0 评论 -
【博客3】探究c++中的const
探究const的性质:1.const可以定义常量(可以作为指定数组大小的常量,c中不可以):2.对于全局const变量,不允许其他cpp文件访问:测试代码:测试结果:结果:编译报错,无法解析a变量,const此时不允许被其他外部的文件所访问。将const去掉后的结果:结果:正确运行。3.测试const修饰形参的意义:当形参为值传递时,加不加const都无所谓,因为修...原创 2019-04-11 20:51:55 · 383 阅读 · 0 评论 -
【博客92】连通图的使用
内容: 今天复习了字典树后,又复习了之前连通图求岛屿数量的题目。很多大一大二学的数据结构太久没用,都有点忘记了哈,记得第一次接触连通图应该是大一下学期看的啊阿算法,当时是用来求山寨里面有几个门派,跟求一群朋友中有几个微信朋友圈一样的道理。题目:给一个数组,其中1代表陆地,0代表水域,然后连在一起的1代表一片陆地,计算有多少块陆地?连通规则是上下左右算连通,斜对角的不算。连通图代码:(解释在注释...原创 2019-08-11 16:17:54 · 375 阅读 · 0 评论 -
【博客91】利用字典树求数组中任意两个数的最大异或值
内容: 今天记录字典树的一种新奇作用,当你需要求一个数组中的任意两个元素的最大异或值的时候,你的一种可能做法就是用一个数与其他另外的所有数求最大异或值,并且对每个数都执行一次这种操作。我一开始没有什么想法也是这么做的,后来从大佬那里学习了一种用字典树来求解的方法,相当奇妙,最近在复习数据结构与算法时,刚好复习到了就写一下哈。题目:求数组中任意两个元素的最大异或值代码:(解释我都写在备注了)...原创 2019-08-11 13:03:10 · 510 阅读 · 0 评论 -
【博客74】vector的swap原理
内容:今天记录一下STL的vector容器的swap函数的实现原理测试代码:将ve1和ve2进行交换之后,*it1结果会是什么呢?结果:并没有发生变化,*it1还是指向那个位置的。那么交换是不是根本不是值的交换,而是内部结构的交换呢?看一下源码:实现原理:可以看到实际是交换vector中用于指示空间的三个指针而已,也就是空间的交换实际是指针指向的交换(vector的迭代器实现是指针...原创 2019-07-20 10:33:57 · 2810 阅读 · 0 评论 -
【博客72】指针和引用的底层实现
内容: 今天记录一下之前测试的利用指针和引用来修改所指变量的值时的区别测试代码:反汇编结果:1. 定义指针和定义引用:首先可以看到定义指针和定义引用的底层:其实两者都是一样的,都是存放了所指变量的地址,通过他来索引到所指变量的。汇编解释:lea eax,[a]的意思:是取a的地址放入eax寄存器。mov dword ptr [b],eax的意思是:把eax寄存器的值放入b变量的地...原创 2019-07-14 15:42:03 · 608 阅读 · 0 评论 -
【博客71】查看编译器处理后C++函数名
内容:记录下其实我们定义的函数名,在编译器处理的时候,并不会是真的跟我们叫的一模一样,不然还如何确定形参数目和类型等相关信息呢?那我来看看简答的情况吧。第一步:创立一个cpp文件写入一个简单函数:第二步:编译成可执行文件,并查看符号表第三步:查看结果如果我们再改一下:结果:分析:其实Z11中的11是函数名的长度,ii是表明有两个参数,且为int类型的,所以上面的是ll表示...原创 2019-07-14 14:07:14 · 1483 阅读 · 0 评论 -
【博客68】使用at()和[ ]访问容器对象的差别!!!
内容: 今天记录一下,在使用STL容器的时候,用at()函数和用[ ]来访问容器对象的差别当正常访问,不越界时 : 看不出有什么差别,都是可以访问的当越界访问时 : at()会抛出异常,而[ ]则直接崩溃测试代码一:[ ]越界访问时的情况结果:测试二:at()访问越界的时候结果:测试三:[ ]越界会不会抛出异常呢?结果:并不会抛出异常,而是程序异常终止建议:1.使用...原创 2019-07-01 22:15:27 · 1176 阅读 · 0 评论 -
【博客67】RAII与RTTI
内容: 今天记录一下两个容易混淆的词,就是RAII与RTTI,以前刚开始学习C++的时候总以为是一个东西哈哈。RAII:(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的技术。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生...原创 2019-07-01 21:56:05 · 1347 阅读 · 0 评论 -
【博客43】使用数组名和指针在汇编上的区别
内容: 今天写一下使用数组名和指针来操作数组元素时,它们采取的汇编指令的区别。测试代码:汇编结果:结果分析:首先eax那一行的4是增量,eax是累加寄存器。例,当你元素是double类型,则它变为8然后接下来的是第二行的5是次数。可以看到下面p[8]的操作,由于之前已经有a[5]了,所以再增加3就可以了。这里以一开始的代码中int来说明:一使用数组名时: 操作是对eax累加器进行...原创 2019-05-07 12:44:19 · 386 阅读 · 3 评论 -
【博客48】特殊的重载:“引用限定区分重载“
内容: 今天复习了C++ primer,又想起了一个知识点,记录下一种特殊的重载。以前我们学过的重载中,有依靠形参数量不同,形参类型不同,const修饰成员函数引起的重载,形参为const引用与非const引用引起的重载等等。其实还有一种重载,就是由引用限定来区分的重载。问题引出:这里有两个排序的函数,准备对类的数据成员进行排序,但是当我们的类对象是左值和是右值时,情况是不一样的,因为如果我们...原创 2019-05-09 19:27:39 · 350 阅读 · 0 评论 -
【博客25】常成员函数返回 “*this“ 的情况
内容: 记录下一种,当你的成员函数的返回值为引用时,但是实际返回来的确是常引用的一种 特殊情况。代码:运行结果:分析:此时报错,提示不能从const test转换为test&,一开始可能没想明白为什么会这样,明明返回值是*this的,这是因为const常成员函数,此时普通成员函数在我的第一篇博客讲到,会传入一个this指针,指的是本类对象,但是对于常成员函数,传入函数的是cons...原创 2019-04-23 13:18:46 · 487 阅读 · 0 评论 -
【博客33】使用 “NVI“解决缺省参数绑定问题
内容: 由于不希望博客写得太长,内容过于累赘,所以把问题和解决拆开来写。上一篇博客中讲述了,缺省参数绑定会出现的问题,会使得你动态指定参数并不生效,因为缺省参数是静态绑定的。那么有没有办法,我既要能够动态指定,又要能够不指定时使用默认值,而且我还有通过指针或者引用来调用,因为要触发多态,只能是指针或者引用。答案:使用非虚接口来配合实现。代码一:使用指定参数的情况结果:代码二:使用默认缺...原创 2019-04-27 09:52:39 · 446 阅读 · 0 评论