
C++基础知识
文章平均质量分 95
主要分享在学习C++中的心得与体会
卫胡迪
向大厂奋斗
展开
-
C++ 11---lambda表达式与包装器
std::bind函数定义在头文件中,是一个函数模板,它就像一个函数包装器(适配器),接受一个可 调用对象(callable object),生成一个新的可调用对象来“适应”原对象的参数列表。相较于类而言,lambda表达式更加的简洁,明了。因此可以说lambda表达式就是经过特殊处理的函数对象,对象名在运行时由编译器决定,可以使用auto推出,函数使用与仿函数一样,都是调用重载的()函数。于是就引入了适配器的概念,我们不关心你是通过函数还是对象实现的,只关注你要什么参数,返回值是什么,统一模板。原创 2024-08-21 16:56:35 · 963 阅读 · 0 评论 -
C++ 左值引用与右值引用超详解
左值一般为我们自己定义的变量,在定义时开辟了内存,我们可以对这块内存赋值,修改内存中的值,如果有const也仅从语法层面上不允许修改,这块内存在其生命周期结束的时候销毁。右值一般为临时变量,是程序运行时产生的中间产物,他不是我们用户自己定义开辟空间的,是由编译器帮我们开辟空间,并且在用完就立即销毁。右值的生命周期一般只在当前语句,当我们要对右值进行赋值时,他已经释放空间了,此时我们再进行访问就是野访问,(与野指针一样造成内存问题),所以我们不能对右值进行修改,编译器强制语法检查,遇到修改操作就报错。原创 2024-08-18 18:21:02 · 4450 阅读 · 0 评论 -
布隆过滤器--极致的速度
布隆过滤器与位图类似,都是对比特位进行操作,不同的是位图只对一个位置标记,但布隆过滤器可以有多个哈希函数,对多个位置标记。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。如下图所示,当我们插入一个数的时候,把多个位置标记位1当我们判断当前元素在不在时,就可以依次判断是否为1即可,假如3个位置有一个为0,那么该元素一定不在,假如3个位置都为1,那么我们不能确定该元素一定在,只能时可能在。原创 2024-08-17 15:42:12 · 685 阅读 · 0 评论 -
位图(bitset)--明确场景极致性能
位图实际上就是运用哈希的思想将内存极致的利用,尽可能地提升效率。下面我们来看到面试题。给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。【腾讯】首先想到的就是将这40亿个数进行排序,然后进行二分查找,快速排序时间复杂度为O(NlogN),二分查找一次为O(logN)。这种方法在时间复杂度层面还是不错的,但空间复杂度相对来说是比较高的,下面我们来计算下上述算法需要多少内存。原创 2024-08-14 15:02:44 · 921 阅读 · 0 评论 -
C++ 哈希底层原理
哈希是一种建立映射的思想,我们尝试用的数据结构是哈希表 ,又称「散列表」,其通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具 体而言,我们向哈希表输入一个键 key ,则可以在 𝑂(1) 时间内获取对应的值 value。早期的C++的STL中没有hash表,在C++11中,STL又提供了4个 unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是 其底层结构不同。其中unordered_set就是一种哈希表。关于C++函数的查询可以点击下面链接。原创 2024-08-12 18:50:40 · 842 阅读 · 0 评论 -
AVL树超详解上
数学家G.M.Adelson-Velskii 和E.M.Landis发明了AVL树,来了解他吧!原创 2024-07-22 15:43:06 · 751 阅读 · 1 评论 -
二叉搜索树详解
二叉搜索树(Binary Search Tree)顾名思义是一种特殊的二叉树,主要用于查找与去重,与我们常见的二叉树不同,他对于结点的值有特殊的要求,二叉搜索树的定义如下主要有以下3点。这里我们的33大于15,在15的右子树上面,仿佛没有错,但是我们以30为父节点来看,33大于30,却出现在30的左子树上面,这是错误的!删除只有一个孩子的结点相对来说还是比较简单的,我们要找到要删除节点的父亲结点,并判断是父亲节点的左边还是右边,子节点的左边还是右边,最后链接起来就可以了。修改如下图后结果就是正确的了。原创 2024-07-19 14:45:09 · 1051 阅读 · 0 评论 -
C++继承保姆级讲解下
在上一篇文章,我们讲到了继承的概念,作用域与友元函数的关系,接下来我们来继续深入学习继承的知识,如果文章有错误,欢迎在评论区指出!接下来我们来看一个重点,派生类的默认成员函数!原创 2024-07-12 18:31:37 · 933 阅读 · 1 评论 -
C++继承保姆级讲解上
对于继承后的访问权限是什么,我们可以简单的理解为,权限趋向于缩小的,权限的大小为public >protected>private,而在子类中的访问权限是MIN(继承方式,父类访问权限)。对于基类的private成员在子类中不可见,这一点要记住。此时再看这张图是不是就十分容易记住了。还有一个细节是,继承时使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,虽然有默认情况,大家最好还是显示的写出来。继承就类似于拷贝了父类一份代码到子类里面。原创 2024-07-11 16:17:20 · 701 阅读 · 0 评论 -
解放双手 免费AI编程工具---Fitten Code
到这里Fitten Code的主要功能已经介绍完毕了,还有一些功能大家可以自行扩展学习。通过使用AI工具,我认为未来程序员这个工作不会消失,可能会减少岗位。AI带来的不仅是计算机行业的冲击,还是各个职业的冲击。或许未来专门的程序员会减少,转而向各个产业转移,实现数字化转型。原创 2024-06-16 11:49:16 · 1424 阅读 · 1 评论 -
C++类和对象下——实现日期类
到这里本篇文章就结束了。喜欢的点点关注!全部代码如下。if (&d!= this)//友元函数声明//比较函数=(Date& d);//加减操作函数private:int _year;int _month;int _day;原创 2024-05-13 23:05:03 · 1082 阅读 · 2 评论 -
C++类和对象 中(六大默认成员函数)
紧接着上一篇文章,接下来我们来认识下类的六大默认成员函数,如下图。之所以叫他默认成员函数,是因为即使我们不写,编译器会默认帮我们写,但只要我们自己显示的写了,编译器就不会帮我们生成对应的成员函数。类似于我们脱贫后就不会再有低保一样。接下来我们一个一个接着看吧!构造函数给人一种开辟空间的感觉,但其实它的作用是初始化而不是开辟空间。我们可以把它当作一个特殊的函数,他的语法如下。1.要求函数名要和类名相同2.没有返回值3.对象实例化的时候编译器自动调用4.可以重载。原创 2024-04-18 22:14:31 · 732 阅读 · 0 评论 -
C++ 类和对象 上
今天我们来进入C++类和对象的学习。相信大家一定听说过C语言是面向过程的语言,而C++是面向对象的语言?那么他们有什么却别呢?又怎么体现呢?这就与我们今天要说的类和对象脱不了关系了。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。面向过程(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程。原创 2024-04-12 23:34:35 · 694 阅读 · 0 评论 -
从C到C++过渡知识 下(深入理解引用与指针的关系)
引用时C++引入的一个新的概念,他和指针有着千丝万缕的关系。首先我们要了解的是引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。语法格式如下与指针十分的相似,&是b为引用的标志,int为引用对象的类型,所以int& b =a;表明b是变量a的引用。那这有什么用呢?下面我们看段代码。这段代码的运行结果是什么呢?结果如下。原创 2024-04-02 23:24:36 · 659 阅读 · 1 评论 -
从C到C++过渡知识 中(为什么C++支持函数重载,而C不支持函数重载)
当我们调用Add函数的时候,由于b参数我们给了他一个初始值,我们便可以调用Add函数时只给她传递一个参数,那么b参数的值就是10,所以打印14.但如果我们传入两个参数,4,5那么b的值就为5,打印9.缺省参数的使用简化了我们记忆代码的负担,弥补了重载函数的一些不足。我们人的思维是直接的,交换两个数直接就是交换两数,而没考虑类型,但在C中因为传递的参数不同,就必须要设置为两个不同的函数。首先便是预处理,在这个阶段的核心任务是将头文件展开,注释的删除,预处理指令,刚开始的时候不同的.cpp文件是分开处理的。原创 2024-03-31 18:46:12 · 1056 阅读 · 3 评论 -
从C到C++过渡知识上
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机 界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言 应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。原创 2024-03-30 17:24:18 · 800 阅读 · 1 评论