C++练级干货
文章平均质量分 91
C++干货
深情码农aron
细水长流,努力幸运共存
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【项目设计】->高并发内存池(谷歌开源项目简化版)
高并发内存池,原型是谷歌(Google)的一个开源项目tcmalloc(Thread-Cache Malloc),线程缓存的malloc,目的是为了实现高效的多线程的内存管理。可以说是malloc和free在特定场景下的升级版。这个技术是非常有名的,go语言的内存分配器用的就是tcmalloc。使用场景:多线程应用,高性能服务器等。我在这里实现的并不是完全实现,而是把tcmalloc的核心框架进行简化后的实现,就是一个简易版,只是为了学习tcmalloc的精华。原创 2024-12-05 15:41:21 · 1433 阅读 · 0 评论 -
C++11练级宝典->包装器详解 function 和 bind介绍
/ 函数名// 函数对象// lamber表达式function<函数返回值(函数参数)> 包装器的名字 = 可调用对象此时封装好的f1 f2 f3就是一个类型了。原创 2024-11-30 08:07:12 · 767 阅读 · 0 评论 -
C++11练级宝典-> 智能指针详解 (4种智能指针)
这里默认大家都知道线程了,这里会出现线程竞争的地方就是我们的_pcount,这个问题在单线程时没有,多线程时这个变量应该是共用的,当多个线程都是指向同一块空间,此时同时调用这个_pcount变量,就出现线程竞争问题了。我们上述实现的所有只能指针都是用delete释放的,但是对于数组delete[],是没有办法的,还有文件的fclose这类不是调用delete关闭的接口,再用delete就不礼貌了。所以不管怎么复制都是一样的值(一样的地址),所以使用指针当计数器是最好的。顾名思义:分享的指针。原创 2024-11-30 08:06:50 · 1122 阅读 · 0 评论 -
C++11练级计划->《可变模版参数》C++11强大特性之一
可变参数模版:返回类型 函数名(Args… args)//函数体原本的参数模版:返回类型 函数名(T t)//函数体定义时,...在前,Args这个名字不是固定的,所以其实和原来不一样的地方是+了3个.在使用时 ...在后,args这个名字也是不固定的。ShowList(1, 'A', string("hello"),2.03,"自律aron");return 0;如上代码:此时我们就可以随便传入参数进去了。原创 2024-11-29 13:27:28 · 1169 阅读 · 0 评论 -
C++练级计划->《右值引用和移动语义》
左值是一个有具体地址的值。左值可以被取地址。左值既可以在赋值符号左边也可以在右边。int main()//以下的p、b、c、*p都是左值int b = 1;int d = c;//左值左右都在return 0;右值不可以取地址,且不能被更改右值只能出现在右边,只能是赋值的那个int main()//以下几个都是常见的右值10;x + y;fmin(x, y);//错误示例(右值不能出现在赋值符号的左边)//10 = 1;return 0;原创 2024-11-29 13:26:49 · 1035 阅读 · 0 评论 -
C++11练级计划->《lambda表达式》速成
先介绍一下:我们在算法题需要使用sort函数时,会发现除了指定范围以外,还有一个默认的模版参数可以填,这个就是sort用来排序的比较函数。lambda函数就是一个匿名函数;用完就丢的。原创 2024-11-28 11:58:41 · 802 阅读 · 0 评论 -
C++练级计划-> 《IO流》iostream fstream sstream详解
(iostream)原创 2024-11-28 11:58:02 · 1596 阅读 · 0 评论 -
C++练级计划->《hash哈希冲突》
我们底层的hashtable其实是类似vector的,所以查找很快,但是怎么存才是关键通常来说如果要存的key是int等整数类型,通过hash函数转换为下标(用取模来限制范围)存储,如果是key是类似string等类型,那就需要对应的新的方法来把string转换为下标然后进行存储。所以哈希函数的作用是,将键转换为一个整数,这个整数通常称为哈希值(Hash Value)。哈希表的范围通常与哈希表的大小相同。当我们插入或查找数据时,首先计算键的哈希值,然后根据哈希值在哈希表中定位数据。原创 2024-11-27 14:31:45 · 630 阅读 · 0 评论 -
C++练级计划->《hash哈希使用详解》
方式一: 构造一个某类型的空容器。//构造int类型的空容器方式二: 拷贝构造某同类型容器的复制品。//拷贝构造同类型容器us1的复制品方式三: 使用迭代器拷贝构造某一段内容。//构造string对象某段区间的复制前两个没什么好说的,都是正常的构造函数,方式三采用迭代器构造,就是通过迭代器遍历对象的元素然后把元素一个一个的放入unordered_set中方式一: 指定key和value的类型构造一个空容器。//构造一个key为int类型,value为double类型的空容器。原创 2024-11-27 14:31:26 · 934 阅读 · 0 评论 -
C++练级计划->《单例模式》懒汉和饿汉
很显然我们要实现单例,那就不允许你在类外调用构造函数,生成这个对象,所以我们在类内就声明了这个对象,初始化时也是只能对这个对象(_slt)初始化。这时候就需要一个日志记录器,用于记录所有模块的日志信息,所以这个记录器应该是针对所有人的,并且为了避免重复,所以使用单例模式。在多线程下的线程安全对象。顾名思义:饿汉,就是一个很饿的人,只要有东西吃立马就吃了,没有任何等待的所以饿汉模式就是在还没进入main函数前就实例好的模式。顾名思义:懒汉,就是很懒的一个人,顶级拖延症,只有必要时才会做对应的事,所以。原创 2024-11-26 14:58:43 · 866 阅读 · 0 评论 -
C++练级计划->《多态》虚函数表,菱形继承多态
现实中买票的测策略:学生 社会人 军人都是要买票的,但是不同的人买票买到的价格却可能是不一样的,学生票,普通票,军人票。虽然我们都执行了买票的操作,但是我们的操作行为是不一样的。多态其实是一种语法特性,只有你使用时他才会出现,不使用时,这个特性不会出现如下是多态形成的条件。原创 2024-11-26 14:58:15 · 1721 阅读 · 0 评论 -
C++算法练级计划->《环形链表》(看完包会)
k*(x + y),这个k是不确定的,如果环很小,那在slow入环时fast可能已经跑很多圈了。然后我们这时重新定义指针红指针为(从head出发的一个slow速度的指针),slow指针(蓝指针)依然在C点。因为本来fast距离跑完一圈是y,此时过了y个时间所以fast跑完一圈应该还多跑了y的距离,而此时slow也是刚跑出y的距离,所以二者相遇。先不要想其他的,想过了y个单位时间,此时slow应该走过了y的距离,而fast应该走过了2y的距离。设slow入环时,fast的路程为Sb,slow的路程为Sa;原创 2024-11-25 08:25:20 · 669 阅读 · 0 评论 -
C++练级计划->《继承》虚继承 菱形继承
(隐藏)。原创 2024-11-25 08:24:27 · 1360 阅读 · 0 评论 -
C++练级计划 -> 《模版》泛型编程
T _Chinese;T _English;//类模板中的成员函数在类外定义,需要加模板参数列表//上面就是模版头,只有声明与定义分离时使用,如果在类内定义就不需要了cout << "数学:" << _Math << endl;cout << "语文:" << _Chinese << endl;cout << "英语:" << _English << endl;原创 2024-11-24 09:14:16 · 703 阅读 · 0 评论 -
C语言练级->##__VA_ARGS__(可变参数)的用法
这个##将逗号和__VA_ARGS__拼接起来,结果__VA_ARGS__此时为空,和逗号拼接后相当于逗号被拿走了,如果平时有可变参数传入时,这时就算拼接了,那也是正常显示逗号,所以没问题。首先##和__VA_ARGS__其实是没什么关联的,##有单独的语法说明,__VA_ARGS__也只是一个宏参数。由上可知:__VA_ARGS__和...的分工是明确的,一个是在定义使用,一个是在宏体内使用。通常__VA_ARGS__用于宏定义,其中关于日志宏需要用的,printf 等支持可变参数的函数的宏封装。原创 2024-11-23 14:05:17 · 1119 阅读 · 0 评论 -
C++练级计划->《海量数据处理》面试题
海量数据:顾名思义:数据量很大,正常的方法例如哈希无法装下这么多数据时,要使用别的结构来解决下面是三种海量处理思想:有三个问题,深度层层递增。原创 2024-11-23 14:04:36 · 880 阅读 · 0 评论 -
priority_queue优先级队列(堆)详解。C++经验+1
priority_queue就是用vector 作为 模版,然后里面的数据填充的方法用的是堆算法。所以priority_queue就是堆。只不过是提供了对应接口的堆。不用手动去敲。方法一:默认定义(只指定是什么元素)默认定义:造出来的直接就是一个大顶堆。方法二:定义大顶堆(指定元素以及用什么当模版以及比较函数)上面不是说priority_queue用vector做模版吗?为什么这里我们还要写一遍。原创 2024-09-25 17:49:30 · 926 阅读 · 0 评论 -
二叉搜索树(来学包会) C++经验+1
二叉树都知道,二叉搜索树就是:每个节点的左子树的值全都小于当前节点的值,右子树的值全都大于当前节点的值。要这个树有什么用?1.二叉搜索树的中序遍历是有序的。2.顾名思义就是为了搜索,线性遍历搜索一个值是全部走一遍,而对于二叉搜索树而言,每走一次就能排除一半的结果。所以就是快。当然也会出现一些特例,如下图所示如果一开始插入的数比后面的数都大,那就变成了一串的。如果这样来搜索,和线性遍历也没区别了,所以后面开发出了AVL树和红黑树解决。注意:二叉搜索树的值是不能被更改的!!!!原创 2024-09-25 17:49:10 · 1244 阅读 · 0 评论 -
C++迭代器 iterator详解
它提供了一种访问容器(如列表、集合等)中元素的方法,而无需暴露容器的内部表示。迭代器使得程序员能够以统一的方式遍历不同的数据结构,而无需关心这些数据结构的具体实现细节。类似于指针指向对应的元素并且能对这个元素进行修改和使用。原创 2024-09-22 17:49:40 · 3803 阅读 · 0 评论 -
C++初始化列表详解 + explicit关键字
使用初始化列表可以提升效率。原创 2024-09-21 16:49:36 · 811 阅读 · 0 评论 -
C++友元详解
友元分为友元函数和友元类。友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。原创 2024-09-21 16:49:29 · 502 阅读 · 0 评论 -
C++日期类详解 第二级支线任务
上述代码表示了这次要实现的类,包括了多种运算符的重载,以及构造函数,相似的操作符,我们只实现一个。日期类的析构和拷贝赋值函数不用写用默认的,因为日期类用的都是内置类型,没有动态开辟的空间,所以不用考虑深拷贝的问题。原创 2024-09-20 18:15:29 · 1110 阅读 · 0 评论 -
c++类和对象(6个默认成员函数)第二级中阶
/空类之前有说到如果一个类什么都没有是一个空类,但是空类为什么和只有函数的类一样只有1字节的占位符?这就说明了空类只是看着是空,其实其中大有乾坤。顾名思义默认成员函数,那就表示了这些函数如果你没写就自动生成,当然你也可以自己写。只有单个形参,该形参是对本类类型对象的引用(一般常用从const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。class Datepublic:Date(int year = 0, int month = 1, int day = 1)// 构造函数。原创 2024-09-20 12:11:59 · 863 阅读 · 0 评论 -
c++this指针详解 第三级
C++类实例化创建对象,函数是共用的,变量是每个对象独一份的。(第二级内容,类的存储部分)那在函数中要使用成员变量,怎么知道是哪个对象的呢?C++中有一个隐藏彩蛋,在每一个成员函数中都有一个藏着的this指针作为函数的第一参数。this指针就是指向当前调用函数的对象的一个指针,既然是一个指向对象的指针,相对的就可以通过这个指针,获取当前对象的成员变量。this指针的使用public://1、当形参和成员变量同名时,可用this指针来区分//返回对象本身int age;原创 2024-09-11 16:31:50 · 519 阅读 · 0 评论 -
C++类和对象 第二级初阶
将函数的定义和声明都放在类中在头文件中将函数声明在源文件中对函数的实现。注意:定义和声明分离时要指定出是在哪一个类中类的访问限定符c++实现封装的方式:用类把对象的属性(变量)和方法(函数)都放到类中。然后再用访问限定符设置权限,选择性的把部分接口提供给用户。就像淘宝你可以改你自己店铺的图片,但你影响不了网页的整体布局。由权限决定的。【限定符说明】1.public里的接口外部可以用。2.protected 和 private 的接口外部不能使用,区别在于子类。原创 2024-09-11 16:32:43 · 911 阅读 · 0 评论 -
C++入门知识 第一级
1.正常定义//命名空间的普通定义namespace NS1 //NS1为命名空间的名称//在命名空间中,既可以定义变量,也可以定义函数int a;2.嵌套定义//命名空间的嵌套定义namespace NS1 //定义一个名为N1的命名空间int a;int b;namespace NS2 //嵌套定义另一个名为N2的命名空间int c;int d;3.同一名称的命名空间对于一个工程而言可以有许多相同名字的命名空间。但是最终会被整合为1个命名空间。所以同名的空间也。原创 2024-09-10 16:24:31 · 889 阅读 · 0 评论
分享