
C++
文章平均质量分 85
C++基础语法
老汉忒cpp
重生之双非学cpp非常荔枝
展开
-
C++知识点复习
对于这些问题的回答,可以按照思维导图的结构来组织答案,然后再进行回答。(首先,要回答好这个问题,需要注意问题的层次,不要一上来就说新增了某某关键字和语法,在这里我们可以分为五个层次来跟面试官讲解:语法,std容器,多线程,智能指针,右值引用)(这里可以对照着思维导图跟面试官说,聊到某个方面的细节还需要自行搞清楚) 首先来看动态库和静态库的演示:先创建一个头文件里面定义了方法,但是还未实现。实现两个方法的实现分别在add.cc和del.cc中。 然后在创建一个main程序,来调用这两个函数 接着,再将add.原创 2024-10-31 21:41:45 · 743 阅读 · 0 评论 -
大部分基础排序复习C++(归并、快排、堆)
在前 0 ~ i - 1 元素有序的情况下,(依次)将第 i 个元素插入前面已经有序的小序列,先使用二分查找找到插入位置的下标index,然后将区间[index + 1,i] 往后移动,再把原来i位置的值插入到index位置,使其有序。注意事项:在合并有序数组的时候,我们需要一个额外的容器,合并完之后再把结果填回到原数组中,对于这个额外的数组,建议使用全局的变量,这样能节省每层创建和销毁的开销,从而提高效率。先让间隔 h 的元素有序,在使得间隔为 h / 2,一直缩小,一直到 h = 1(此时数组有序)。原创 2024-09-23 12:50:59 · 850 阅读 · 0 评论 -
空间配置器
在大型项目中,我们有没有想过,对于一些动态开辟空间的场景,如果空间大小比较小,但是又频繁申请释放的场景,那么频繁的从堆上拿取又放回是否有优化的地方呢?原创 2023-10-22 13:39:03 · 80 阅读 · 0 评论 -
C++类型转换
我们知道,类型不同的值相互赋值时,编译器有时候会进行隐式类型的转换,但是隐式类型的转换有时候会有一些坑。如上图,如果当pos传0时,end先会被隐式转换成size_t类型(无符号int),结果就是程序死循环了。虽然这个也可以有多种方法来避免,比如给pos进行int强转等等。在C++中,在父子类对象赋值的时候又是怎么转换的呢?原创 2023-10-16 12:35:30 · 58 阅读 · 0 评论 -
C++哈希表简单梳理+对map和set的封装
在C++98中,STL提供了以红黑树为底层的一些关联式容器,它的查询效率达到了log_2N,在C++11时,STL又提供了以哈希表为底层的四个关联式容器,它的查询效率可以达到常数级别。这个四个容器分别是我们介绍的是unorderd_map和,unordered_set。哈希表的底层我们之前用过的计数数组其实用的就是哈希思想,它是通过Key作为下标来达到直接对元素进行访问。Key(下标)值的确定Key的值有时不会直接作为下标,而是会经过一些方法的处理再作为下标。原创 2023-09-17 14:33:17 · 144 阅读 · 1 评论 -
C++特殊类设计
为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有。原创 2023-10-15 11:17:52 · 66 阅读 · 1 评论 -
C++异常(梳理)
一般公司里都会有一套自己的异常体系,就是先定义一个父类异常,然后写许多子类继承父类,捕获时只要用const基类引用来接收就行了,这样能使得代码中异常的使用变得规范。示例public:,_id(id){}比特就业课protected:int _id;原创 2023-09-04 01:39:41 · 78 阅读 · 1 评论 -
简单梳理C++11特性
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。。相比较而言,。因为语法太多,在这里我们只熟悉一些常用的就好了。原创 2023-09-25 09:38:37 · 131 阅读 · 1 评论 -
C++的AVL树简单梳理
AVL树是由两位俄罗斯计算机科学家G.M. Adelson-Velsky和E.M. Landis在1962年提出的,以他们的姓氏首字母命名。原创 2023-09-11 09:41:17 · 98 阅读 · 0 评论 -
位运算+位图+布隆过滤器的简单梳理
首先看一道题:首先像这种判断在不在的问题,我们第一想到的肯定是用set或者unordered_set。但是当数据量过大时,直接使用set这种就不适用了。40亿个整形的大小大概在16G左右,这样的话太大了。但是仅仅只是判断在不在的问题时,我们没必要如此大费周章,我们可以用第几位的比特位是0还是1来表示这个数存不存在,这样原本要16G的大小就变成0.5G。这就是位图的思想,跟位运算有着很大的关系。原创 2023-09-21 19:10:08 · 134 阅读 · 0 评论 -
C++红黑树简单了解
红黑树是由美国计算机科学家Rudolf Bayer和Edward M. McCreight于1972年发明的(最初被称为"对称二叉B-树")。然而,它的命名则是由后来的研究者Leonidas J. Guibas和Robert Sedgewick于1978年提出的,他们使用"红黑树"这个术语来描述该数据结构的特性。原创 2023-09-12 00:04:00 · 111 阅读 · 0 评论 -
C++二叉搜索树
二叉搜索树也叫二叉排序树(也可以是空树),它是具备以下特征的二叉树:1.若它的左子树不为空,则它的所有左子树的值都小于根结点。2.若它的右子树不为空,则它的所有右子树的值都大于根结点。3.它的左右子树也分别为二叉搜索树。原创 2023-09-01 23:30:31 · 77 阅读 · 1 评论 -
有关C++的各种问题(新手)
这个是我在学C++的时候,通过偶尔看一些大佬们分享的面经中,看到在我的知识点范围内能理解的问题时,我会把这个问题弄懂后,自己模拟来答一遍。目的一是不断积累巩固知识,二是要锻炼自己的语言表达能力。这篇博客会持续更新我新搜集的问题。原创 2023-08-31 20:04:49 · 144 阅读 · 0 评论 -
C++智能指针
在C++加入异常后,对资源释放的问题必须非常谨慎,稍不注意就会导致内存泄漏,为了解决这个问题而引入了智能指针。原创 2023-10-09 10:09:33 · 83 阅读 · 1 评论 -
C++set和map的使用+红黑树底层对map和set的封装
不同与list,vector等序列式容器,关联式容器存的是结构的键值对,它在检索时比序列式容器的效率更高。原创 2023-09-04 14:38:48 · 104 阅读 · 1 评论 -
关于cpp的优先级队列(堆)
删除的时候,是top的值与尾部互换后,再把尾部pop_back掉,需要调整的元素在顶部,所以只能用向下调整,而插入的时候是把元素插在尾部(vector),此时需要调整的元素在尾部,所以只能使用向上调整法。而用迭代器初始化的时候,用向上调整和向下调整都可以达到目的,但是一看发现,使用向上调整时调用的函数次数会比向下调整建堆调用的函数次数要多,也就是资源的浪费,所以初始化的时候建议用向下调整建堆。cpp的优先级队列简单模拟实现及测试。原创 2023-08-18 23:59:59 · 312 阅读 · 2 评论 -
关于cpp的多态(详细梳理)
当多继承时,子类有自己的虚函数时,它会把这个虚函数放到第一个父类的虚表的最后。注意:继承是对父类虚表的覆盖,比如B继承A,那么它里面的虚表就是B对A虚表的覆盖,多继承时也是如此,比如C继承A和B,那么它里面就俩张虚表,一张对A的覆盖,另一张对B的覆盖。在虚继承后,当子类继承爸爸们后,爷爷部分的成员只有一份且放在子类的底端,在爸爸们内部原本爷爷部分的成员通通化身为一个虚基表指针,它指向了一个虚基表,里面存的是与子类底端爷爷部分成员的与虚基表指针的偏移量,他会通过这个偏移量来找到爷爷的成员进行访问。原创 2023-08-23 15:59:22 · 394 阅读 · 0 评论 -
关于C++继承
关键字(在菱形继承的位置中就是在爸爸位置加上),但它和虚函数没有半毛钱关系,它的作用是当一个类(后面就叫它孙子)多继承后形成了菱形继承后,它的多个爸爸们会把爷爷里的成员放在孙子体内的最低端(只有一份),然后在爸爸里面本应该存在爷爷的成员通通化身成一个指针,它指向了一个叫做虚基表的东西,那里面放着与各个爷爷的成员的地址的偏移量,每次通过爸爸调用的时候就通过这个偏移量来找到低端爷爷的成员。最后就是关于C++的继承的一个超级答辩的地方就是菱形继承,它会导致数据的冗余和二义性,它是由于多继承引起的。原创 2023-08-19 19:00:13 · 64 阅读 · 1 评论 -
简单了解C++线程库
在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。return 0;另外,由于我这里没有传参,所以这是一个空线程,它不会启动的。除非进行移动赋值。原创 2024-03-27 00:22:34 · 1435 阅读 · 0 评论