
C++编程学习
文章平均质量分 91
C++学习
卖寂寞的小男孩
在真正学技术的时期,要做到口不贪佳昧,耳不乐逸声,目不淫欲色,身不怀于安,朝夕励志,强吾之羸。有过必梭,有不善必惧,操好人生大旗的同时也要始终记得沉默是金。
C++领域优质博主,华为云云享专家
展开
-
STL详解---stack与queue(含priority_queue)的使用
stack与queue不同于之前的string,vector,list,它们是一种容器适配器,而不是一种容器。并且是不支持迭代器的。原创 2022-04-06 08:00:00 · 701 阅读 · 54 评论 -
C++重载的底层原理
而在C++的汇编代码中,如果调用函数f(),生成的f()名与其中的参数有关:如果f()中没有参数,则会生成call fv(?)其中v表示没有参数。如果f()中的参数为int,则会生成call fi(?)其中i为类型int的首字母。此时fv(?)与fi(?)对应的符号表中的地址就可以查找了,可以填入,所以C++支持函数重载而C语言不支持。原创 2022-10-18 09:34:49 · 213 阅读 · 1 评论 -
C++STL函数总结
set是只有key值的二叉搜索树。multiset是只有key值,并且可以有key值相等节点的二叉搜索树。有kv结构的二叉搜索树,mutimap支持相同的key进行插入(value可以不同也可以相同)。list是一个双向带头循环链表,不能下标访问。vector是一个数组,可以下标访问。string是一个字符串。原创 2022-10-03 15:44:04 · 795 阅读 · 2 评论 -
C++智能指针
在C++中,动态内存的使用时有一定的风险的,因为它没有垃圾回收机制,很容易导致忘记释放内存的问题,具体体现在异常的处理上。想要释放掉抛异常的程序的一些内存,往往需要多次抛异常,这种处理方式是十分麻烦的。智能指针的本质就是使用一个对象来接管一段开辟的空间,在该对象在销毁的时候,自动调用析构函数来释放这段内存。因此智能指针的本质是一个类,类中最主要的对象是一个指针,该类的析构函数就是销毁该指针指向的空间,使用智能指针的本质就是将一个指向动态开辟空间的指针赋给该类中的指针。原创 2022-10-03 08:52:48 · 971 阅读 · 3 评论 -
C++11异常处理
;public :};public :};throw SqlException("权限不足" , 100 , "select * from name = '张三'");throw CacheException("权限不足" , 100);throw CacheException("数据不存在" , 101);原创 2022-09-28 10:17:52 · 462 阅读 · 4 评论 -
C++哈希(无序容器,哈希表)
C++无序容器和哈希表创建方式的介绍原创 2022-09-18 09:16:21 · 905 阅读 · 2 评论 -
【C++11新特性】右值引用,完美转发
2.如果你没自己实现移动赋值重载函数,且没有实现析构函数,拷贝构造,拷贝赋值重载中的任何一个,编译器会自动生成一个移动赋值重载函数。默认生成的移动赋值重载函数,对内置类型直接进行赋值,对于自定义类型,如果有对应的移动赋值重载函数就调用其对应的移动赋值重载函数,如果没有则调用拷贝赋值。默认生成的移动构造函数,对内置类型进行直接拷贝,对于自定义类型,如果有对应的移动构造函数就调用其对应的移动构造函数,如果没有那么调用拷贝构造。在模板中,&&表示的不是右值引用,而是万能引用,即既可以接收左值,又可以接收右值。原创 2022-09-23 10:09:17 · 1039 阅读 · 3 评论 -
C++哈希(位图,布隆过滤器,哈希切分)
位图结构也是STL中的一种,算是哈希的一种变形,在查找数据的方面效率也比较高。给定40亿个不重复的无符号整数,没排过序,给一个无符号整数,如何快速判断一个数是否在40亿个数中?1.遍历:时间复杂度为O(N)。2.排序(O(NlogN)),然后利用二分查找:logN3.使用位图来解决:数据是否在给定的整型数组中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制的比特位为,代表存在,为0代表不存在。原创 2022-09-21 08:37:55 · 231 阅读 · 2 评论 -
【C++11新特性】统一列表初始化,声明,新增容器,lambda表达式
相比于C++98和C++03,C++11带来了数量可观的变化,其中包含了约有140种新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是一种从C++98/03中孕育出来的一种新的语言,C++11能更好的用于系统开发和库开发,语法更加泛化和简单化,更稳定安全,不仅功能强大,而且能提高程序员的开发效率。int _x;int _y;cout原创 2022-09-22 09:19:43 · 495 阅读 · 1 评论 -
【C++11新特性】类的新功能,可变模板参数,包装器
传右值对比 – push_back是构造+移动构造 emplace_back是直接构造形态有区别,如果push_back/emplace_back的参数对象及其成员都实现了移动构造,本质区别不大, 因为构造出来+移动构造,和直接构造成本差不多, 但是如果push_back/emplace_back的参数对象及其成员没有实现移动构造,那么emplace_back还是直接构造,push_back则是构造+拷贝构造(没有移动构造编译器会调用拷贝构造),因此代价就大了.这就需要对参数包进行解析。原创 2022-09-24 09:03:54 · 437 阅读 · 1 评论 -
【C++11新特性】多线程
主要通过RAII的方式,对其管理的互斥量进行了封装,在需要加锁的地方,只需要用上述介绍的任意互斥体实例化一个lock_guard,调用构造函数成功上锁,出作用域前,lock_guard对象要被销毁,调用析构函数自动解锁,可以有效避免死锁的问题。在这段代码中,t1和t2两个线程对同一个信号量进行++操作,由于底层的++操作的汇编代码是多行的,可能会导致x的数值混乱,因为对于一个++操作来说,它底层的汇编大概分为三步,分别是ld,++,sd。但如果加在里面虽然是并行运行,这样频繁的加锁解锁是需要消耗资源的。原创 2022-09-26 10:31:45 · 855 阅读 · 15 评论 -
STL详解----list的使用
学习了vector与string我们可以知道,所谓的STL就是将字符串,数组等数据结构进行严密地封装,方便我们直接使用而不需要进行临时创建,本节将介绍STL中的list,该类是对双向带头循环链表的使用。原创 2022-04-03 18:00:00 · 9424 阅读 · 54 评论 -
C++手撕红黑树
红黑树在表意上就是一棵每个节点带有颜色的二叉搜索树,并通过对节点颜色的控制,使该二叉搜索树达到尽量平衡的状态。红黑树确保没有一条路径比其他路径长两倍。和AVL树不同的是,AVL树是一棵平衡树,而红黑树可能平衡也可能不平衡(因为是尽量平衡的状态)每一次插入都对根节点置为黑操作,因为第一种情况可能导致根节点不是黑。同时对根节点置黑也并不违反三条规定。...原创 2022-08-07 09:30:41 · 704 阅读 · 35 评论 -
C++手撕AVL树
要手撕AVL树,我们首先要知道什么是AVL树。AVL树是在二叉搜索树的基础之上改造的。当我们插入的是一个有序的序列的时候,二叉搜素树会使用一条直线来进行存储,这样并不利于查找。当遇到这种情况的时候我们就需要对这棵树来进行调整。AVL树会通过旋转等操作,来规避这种情况。最终满足每一个节点的平衡因子的绝对值......原创 2022-06-09 13:38:16 · 571 阅读 · 42 评论 -
C++搜索二叉树(及key/value模型的应用)
了解搜索二叉树是为了STL中的map和set做铺垫,我们所熟知的AVL树和平衡搜索二叉树也需要搜索二叉树的基础,本文就来建立一棵搜索二叉树。原创 2022-05-24 09:54:15 · 1040 阅读 · 33 评论 -
STL详解---set和map
在我们之前的学习中,已经了解了STL的部分容器,比如:vector,list,deque,forward_list等等,这些容器统称为序列式容器,而我们今天要将的map和set称之为关联式容器,序列式容器和关联式容器的区别就在于,序列式容器单纯为了存储数据而存在。而关联式容器不仅仅存储数据还对结构进行了存储。在了解set和map之前,我们需要了解搜索二叉树是什么,因为set和map的底层就是一棵搜索二叉树。原创 2022-05-31 09:39:05 · 1405 阅读 · 31 评论 -
C++多态的底层原理
要了解C++多态的底层原理需要我们对C指针有着深入的了解,这个在打印虚表的时候就可以见功底,理解了多态的本质我们才能记忆的更牢,使用起来更加得心应手。原创 2022-04-27 09:53:12 · 3100 阅读 · 69 评论 -
C++多态的用法详解
C++多态是在继承的基础上实现的,了解多态之前我们需要掌握一定的C++继承的知识,本文将介绍C++中多态的概念,构成条件以及用法。原创 2022-04-23 17:03:04 · 10814 阅读 · 54 评论 -
C++IO流
流,是物质从一处流向另一处的过程,是对一种有序连续且具有方向性的数据(其单位可以是bit,byte,packet)的抽象描述。C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输入设备(显示器)输出的过程。这种输入输出的过程被形象比喻为"流"。它的特性是:**有序连续,具有方向性**。为了实现这种流动,C++定义了I/O标准类库,这些每个类都被称为流/流类,用以完成某方面的功能。原创 2022-04-12 09:59:29 · 874 阅读 · 60 评论 -
C++单/多继承详解
C++的继承机制相对其他语言是比较复杂的一种,不同于java只支持单继承,C++不仅支持单继承,也支持多继承,对于多继承中的菱形问题会引发一系列的麻烦,C++的两个重要缺陷,一个是多继承,一个是垃圾回收器。本文将详细讲解C++的单继承和多继承,以及菱形继承的解决方法及原理。原创 2022-04-17 10:13:54 · 1915 阅读 · 59 评论 -
C++模板进阶(非类型模板参数,模板特化,模板的分离编译)
本节主要介绍三点:非类型模板参数,函数模板和类模板的特化,模板不能进行分离编译。原创 2022-04-09 11:53:00 · 1022 阅读 · 27 评论 -
STL详解---string类的使用
网上有句话说:不懂STL不要说你会C++。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己造轮子,站在前人的肩膀上,健步如飞地飞速开发。原创 2022-03-16 16:17:23 · 2372 阅读 · 57 评论 -
STL详解---vector的使用
当我们使用C语言的语法来实现数组的时候,增删查改都需要自己来定义函数,STL中给出了数组模板vector,其中包含函数可以帮助我们更便捷地处理数组。原创 2022-03-27 11:22:15 · 3378 阅读 · 61 评论 -
C/C++内存管理
在C语言的学习中,我们了解到了动态开辟内存的两个重要的函数malloc以及free,C++在此基础上对动态内存的开辟以及空间的释放进行了简化,以期望更加满足面向对象编程的特点,本文将介绍C/C++的内存管理,C++中动态开辟内存的两个操作符以及它们底层的实现,并提出了内存池的概念,以及内存泄漏问题。原创 2022-03-09 08:00:00 · 898 阅读 · 68 评论 -
C++模板初阶
在书写函数或类时,我们可能遇到这样的问题,明明结构一模一样但是只由于某个参数的类型不同就需要重新写函数,或者构建重载函数,重新书写类就更加麻烦了,并且使程序显得冗长,本文将介绍C++中的模板,从而解决相似函数重复书写问题。原创 2022-03-13 08:52:38 · 1045 阅读 · 59 评论 -
C++类与对象(初始化列表,explicit关键字,static成员,缺省声明,友元,内部类)
初始化列表构造函数除了以普通的函数方式存在之外,也可以以初始化列表的形式存在。初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式。原创 2022-01-28 10:00:00 · 807 阅读 · 51 评论 -
C++类与对象(类中的六大默认成员函数)
类的默认成员函数如果一个类中,什么成员都没有,我们称之为空类。但是空类中也并不是什么都没有,编译器会自动生成6个默认成员函数,如果我们去实现默认成员函数,编译器就不会默认生成。默认成员函数存在的意义在于防止我们忘记进行一些必要的操作。原创 2022-01-22 08:00:00 · 1140 阅读 · 50 评论 -
C++类与对象(类的引入,this指针)
面向过程与面向对象面向过程C语言是面向过程的,关注的是过程,就好比在外卖系统中,关注的是下单,接单,送餐这三个过程,每一个过程都是靠函数来实现的。面向对象类似于java,就是纯面向过程的语言,它关注的是商家,用户,骑手这三方以及他们的交互。是靠类的设计与类之间的关系实现的。而我们的C++是既可以面向对象也可以面向过程的(兼容C)面向对象的三大特性封装,继承和多态。类的引入关键字定义类可以使用两种关键字:struct和class。两者定义类的区别在于,在不使用访问限定符的情况下,stru原创 2022-01-17 21:06:54 · 976 阅读 · 27 评论 -
C++基础续(引用,内联函数,auto关键字,语法糖,空指针)
引用概念引用是给已经存在的变量取一个别名,它和它引用的变量公用一块空间。就像李逵和黑旋风一样,是同一个人。引用的符号是&,和取地址符号是一样的。int a = 10; int& ra = a; printf("%d %p\n", a, &a); printf("%d %p\n", ra, &ra);这段代码定义了一个ra作为已存在变量a的引用。它们的值和地址时一样的。引用的特性引用在定义时必须初始化int a=10;int &b;//错误原创 2022-01-16 11:52:26 · 952 阅读 · 35 评论 -
C++基础(命名空间,输入输出流,缺省参数,函数重载)
C++是在C语言的基础上提出的,本节将区分C与C++的一些相似且易错的知识点,进行过渡的同时,为接下来的C++学习奠定基础。原创 2022-01-10 22:08:27 · 1193 阅读 · 24 评论