![](https://img-blog.csdnimg.cn/f5727bb617d94220b58fdb11f87425d9.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 97
C++是一种面向对象的计算机程序设计语言,它是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
小羊失眠啦.
在心里种花 人生才不会荒芜
展开
-
2024年第十五届蓝桥杯C/C++B组复盘(持续更新)
小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上, 大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进 行一次握手(且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手(但 这 7 人与除这 7 人以外的所有人进行了握手)。请问这些人之间一共进行了多 少次握手?原创 2024-04-15 09:47:38 · 3878 阅读 · 9 评论 -
【C++】C++入门(1)
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。命名为C++。C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。命名空间的定义由两部分构成:首先是。原创 2024-01-22 15:08:14 · 1794 阅读 · 0 评论 -
【C++】C++入门(2)
在早期 C/C++ 中 auto 的含义是:使用auto 修饰的变量,是具有自动存储器的局部变量C++11 中,标准委员会赋予了 auto 全新的含义即:auto 不再是一个存储类型指示符,而是作为一个新的类型 指示符来指示编译器, auto 声明的变量必须由编译器在编译时期推导而得。使用 auto 定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导 auto 的实际类 型。因此 auto 并非是一种 “ 类型 ” 的声明,而是一个类型声明时的 “占位符。原创 2024-01-31 09:45:00 · 2360 阅读 · 0 评论 -
【C++】认识类和对象
学习C语言时,我们就经常听说C语言是面向过程的,那么什么是面向过程呢?举个例子,我们现在要完成洗衣服的工作,此刻我们关注的是洗衣服的过程:拿个盆子;接水;放衣服;到洗衣粉C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是面向对象的,关注的是对象,在解决问题时,通过对象间的交互来完成,每个对象负责不同的工作。//...类的主体:由成员函数和成员变量组成//一定要注意后面的分号如上所示,类的定义与结构体的定义非常相似,但我们还是得认识几个专有名词。原创 2024-02-29 16:32:38 · 1997 阅读 · 4 评论 -
【C++】类的默认成员函数(上)
`构造函数`:主要完成`初始化`工作;- `析构函数`:主要完成`清理`工作;- `拷贝构造`:使用一个同类的对象初始化创建一个对象;- `赋值重载`:把一个对象`赋值`给另一个对象;- `取地址重载`:`普通对象`取地址操作;- `取地址重载`(const):`const对象`取地址操作;原创 2024-03-03 13:45:00 · 1844 阅读 · 1 评论 -
【C++】类的默认成员函数(下)
本章主要内容为认识与学习C++非常重要的概念——`运算符重载`。通过`日期类`的实现,逐步学习各个运算符重载的实现方法即含义。6个默认成员函数还剩余3个——赋值运算符重载与2个取地址重载,我们本章就会解决它们~原创 2024-03-13 17:14:54 · 2116 阅读 · 61 评论 -
【C++】类和对象终章
本章我们将继续加深对构造函数的学习。认识`初始化列表`、`explicit关键字`、`static成员`、学习static成员的`相关特性`、学习`友元`的概念,包含`友元函数`和`友元类`;`内部类`;`匿名对象`以及关于`拷贝构造`时一些`编译器优化`的情况等。原创 2024-03-17 09:15:00 · 2030 阅读 · 52 评论 -
【C/C++】内存管理
将内存分成不同区域是为了实现更好的管理,比如在我们现实生活中,一幢房子会被分为客厅、厨房、卧室、卫生间等区域,目的是为了使我们生活更加方便、空间利用更加合理,计算机也是如此,更何况是空间非常珍贵的内存,因此在我们的程序中存在不同内存分区new调用申请空间在申请的空间上调用构造函数delete在空间上调用析构函数再调用释放空间new []调用函数,根据数值N,调用N次函数申请空间在申请的空间上调用N次构造函数delete []在申请的空间上调用N次析构函数调用函数,然后由函数再调用释放空间。原创 2024-03-27 06:45:00 · 2349 阅读 · 0 评论 -
【C++】模板初阶
比如我们常用的两数相加函数,按照以前的写法,处理整型数据时,编写整型的方法;处理浮点型时,又得编写一个浮点型的加法,好在C++支持函数重载,使得我们可以存在同名函数,假若是C语言实现时,我们甚至要写两个不同名的相加函数原创 2024-03-30 10:45:00 · 1581 阅读 · 1 评论 -
【C++】gcd函数的写法
大公因数(英语:highest common factor,hcf)也最大公约数(英语:greatest common divisor,gcd)是数学词汇,指能够整除多个整数的最大正整数。而多个整数不能都为零。例如8和12的最大公因数为4。穷举法:分别列出两整数的所有约数,并找出最大的公约数。素因数分解:分别列出两数的素因数分解式,并计算共同项的乘积。短除法:两数除以其共同素因数,直到两数互素时,所有除数的乘积即为最大公约数。原创 2024-04-11 12:56:04 · 1541 阅读 · 0 评论 -
【C++】STL学习之vector的使用
vector是表示可变大小数组的序列容器,其使用的是一块 连续 的空间,因为是动态增长的数组,所以vector在空间不够时会扩容;vector优点之一是支持 下标的随机访问,缺点也很明显,头插或中部插入效率很低,这和我们之前学过的顺序表性质很像,不过在结构设计上,两者是截然不同的。原创 2024-04-14 13:00:00 · 1013 阅读 · 1 评论 -
【C++】STL学习之vector的模拟实现
vector是STL中的容器之一,其使用方法类似于数据结构中的顺序表,得益于范型编程和C++特性的加持,vector更强大、更全能;在模拟实现vector时,还需要注意许多细枝末节,否则就很容易造成重复析构及越界访问vector的数据安排以及操作方式,与array非常相似。两者的唯一差别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector。原创 2024-04-18 15:48:00 · 1514 阅读 · 0 评论 -
【C++】STL学习之string的使用
STL是C++伪函数空间配置器算法容器迭代器和配接器,其中各种各样的容器可以很好的辅助我们写程序,比如今天要介绍的string,有了它之后,我们对字符串的操作就能变得行云流水注意: string诞生于STL之前,因此存在部分接口冗余的情况。原创 2024-04-08 08:45:00 · 1980 阅读 · 0 评论 -
【C++】STL学习之string的模拟实现
string本质上就是一个专注于存储字符的顺序表,使用起来很方便;但在模拟实现string时,有许多值得注意的点,下面就来看看string类是如何诞生的吧注意: string接口众多,本文模拟实现的只是部分常用接口。原创 2024-04-11 10:30:00 · 662 阅读 · 0 评论 -
【C++】STL学习之list的使用
STL中的vector存在头部及中部操作效率低的缺陷,需要另一种容器来弥补其短板,此时list就应运而生,list是一个双向带头循环链表,是链表的终极形态,除了不支持下标的随机访问外,其他方面效率都是极高的,本文将带大家认识、使用list容器list的结构示意图(双向带头循环链表)原创 2024-04-21 10:00:00 · 1587 阅读 · 1 评论 -
【C++】STL学习之list的模拟实现
STL中的list是一个双向带头循环链表,作为链表的终极形态,各项操作性能都很优秀,尤其是list中迭代器的设计更是让人拍案叫绝,如此优秀的容器究竟是如何实现的?本文将带你共同揭晓。原创 2024-04-24 16:05:23 · 988 阅读 · 1 评论 -
【C++】STL学习之容器适配器
适配器(配接器)是STL中的六大组件之一,扮演着轴承、转换器的角色,使得STL中组件的使用更为灵活,比如栈和队列就是属于适配器而非容器,以及神秘的反向迭代器也属于适配器具有多种功能的电源适配器,可以满足多种需求。原创 2024-04-27 08:30:00 · 1737 阅读 · 2 评论 -
【C++】STL学习之反向迭代器
适配器模式是STL中的重要组成部分,在上一篇文章中我们学习了容器适配器的相关知识,即stack与queue,除了容器适配器外,还有迭代器适配器,借助迭代器适配器,可以轻松将各种容器中的普通迭代器转变为反向迭代器,这正是适配器的核心思想反向迭代器适用于所有的容器,因此它是作为一个单独的.h文件出现的,别的容器如果想使用,直接包含就行了。原创 2024-04-30 09:30:00 · 1094 阅读 · 1 评论 -
【C++】STL学习之优先级队列
优先级队列是容器适配器中的一种,常用来进行对数据进行优先级处理,比如优先级高的值在前面,这其实就是初阶数据结构中的堆,它俩本质上是一样东西,底层都是以数组存储的完全二叉树,不过优先级队列中加入了泛型编程的思想,并且属于STL中的一部分。原创 2024-05-01 16:36:06 · 1328 阅读 · 1 评论 -
【C++】模板进阶
模板是搭建STL的基本工具,同时也是泛型编程思想的代表,模板用好了可以提高程序的灵活性,以便进行更高效的迭代开发,模板除了最基本的类型替换功能外,还有更多高阶操作:非类型模板参数、全特化、偏特化等,以及关于模板声明与定义不能分离(在两个不同的文件中)的问题,都将在本文中进行介绍。原创 2024-05-02 10:30:00 · 1247 阅读 · 0 评论 -
【C++】继承
继承是面向对象三大特性之一(封装、继承、多态),所有的面向对象(xx)语言都具备这三个基本特征,封装相关概念已经在《类和对象》系列中介绍过了,今天主要学习的是继承,即如何在父类的基础之上,构建出各种功能更加丰富的子类了解完继承相关概念后,就可以开始学习使用继承了。原创 2024-05-03 09:30:00 · 1154 阅读 · 0 评论 -
【C++】多态
多态是面向对象三大基本特征中的最后一个,多态可以实现 “一个接口,多种方法”,比如父子类中的同名方法,在增加了多态后,调用同名函数时,可以根据不同的对象(父类对象或子类对象)调用属于自己的函数,实现不同的方法,因此多态的实现依赖于继承实现多态需要借助虚表(虚函数表),而构成虚表又需要虚函数,即virtual修饰的函数,除此之外还需要使用虚表指针来进行函数定位、调用截至目前为止,我们已经学习了三个“重”重载、重写、重定义这三兄弟不止名字很像,而是功能也都差不多,很多面试题中也喜欢考这三者的区别。原创 2024-05-04 12:30:00 · 1858 阅读 · 0 评论 -
【C++】二叉搜索树
时隔多日,又回到了二叉树的学习中,在 C++ 进阶中,我们首先要学习 二叉搜索树,重新捡起二叉树的相关知识,然后会学习 AVL 树 及 红黑树,最后会用红黑树封装实现库中的 set 和 map,作为 C++ 进阶中的难度最高峰,整个学习过程非常艰辛,但 关关难过关关过,让我们先从比较简单的 二叉搜索树 开始学习二叉搜索树(Binary search tree)是基于二叉树的一种改进版本。因为普通二叉树没有实际价值,无法进行插入、删除等操作(无意义),但二叉搜索树就不一样了,原创 2024-05-10 14:12:37 · 865 阅读 · 0 评论 -
【C++】set 和 map 学习及使用
set和map是STL中的容器之一,不同于普通容器,它俩的查找速度极快,常用来存储各种经常被检索的数据,因为这俩容器的底层是平衡二叉搜索树中的红黑树。除此之外,还可以借助其特殊的性质,解决部分难题set其实就是之前在二叉搜索树中key的模型set只包含实值value,或者说它的实值就是键值,键值就是实值其中的T就是set的实值(键值),参数2Compare为存储依据,默认为升序,即符合二叉搜索树升序,参数3Alloc是空间配置器,现在不必深究作为STL中的容器,set当然少不了迭代器,原创 2024-05-12 23:48:41 · 961 阅读 · 0 评论 -
【C++】AVL树
普通的二叉搜索树可能会退化为单支树(歪脖子树),导致搜索性能严重下降,为了解决这个问题,诞生了平衡二叉搜索树,主要是通过某些规则判断后,降低二叉树的高度,从而避免退化,本文介绍的AVL树就属于其中一种比较经典的平衡二叉搜索树,它是通过 平衡因子 的方式来降低二叉树高度的,具体怎么操作,可以接着往下看AVL树在原二叉搜索树的基础上添加了平衡因子bf以及用于快速向上调整的父亲指针parent,所以 AVL树是一个三叉链结构所以AVL//AVL树的节点类(key / value 模型)int _bf;原创 2024-05-14 11:00:00 · 640 阅读 · 0 评论 -
【C++】红黑树
红黑树是平衡二叉搜索树中的一种,红黑树性能优异,广泛用于实践中,比如Linux内核中的CFS调度器就用到了红黑树,由此可见红黑树的重要性。原创 2024-05-20 10:00:00 · 544 阅读 · 0 评论 -
【C++】用红黑树封装 set 和 map
红黑树的基本情况我们已经在上一篇文章中学习过了,本文主要研究的是红黑树的实际应用:封装实现set和map,看看如何通过一棵红黑树满足两个不同的数据结构;在正式封装之前,先要对之前的红黑树进行完善,增加必要功能。原创 2024-05-26 11:15:20 · 518 阅读 · 0 评论 -
【C++】初识哈希
哈希(Hash)是一个广泛的概念,其中包括哈希表、哈希冲突、哈希函数等,核心为元素(键值)与存储位置(哈希值)之间的映射关系,哈希值可以通过各种哈希函数进行计算,需要尽量确保 “唯一性”,避免冲突,除此之外,哈希函数还可用于区块链中,计算 区块头(Head)中的信息,本文将带你认识哈希,学习其中的各种知识。原创 2024-05-31 09:45:00 · 1097 阅读 · 1 评论 -
【C++】哈希表的模拟实现
哈希表的核心思想是 映射,对数据的键值进行处理后,映射 至表中对应的位置,实现存储,利用空间换时间,哈希表的查找效率非常高,可以达到O(1),哈希表的实现主要分为两种:闭散列 与 开散列,本文中将利用这两种方案实现哈希表键值对、状态表示键值对既可以是K也可以是K / V,我们这里实现的是K / V空EMPTY初始状态存在EXIST插入数据后的状态删除DELETE删除数据后的状态其实简单分为 [可用 / 不可用] 两种状态也行,细分出EMPTY与DELETE是为了在进行 探测 时,提高效率。原创 2024-06-03 22:42:18 · 972 阅读 · 2 评论 -
【C++】哈希表的完善及封装
关于哈希表的两种实现方法:闭散列、开散列 已经在上一篇文章中学习过了,闭散列 存在踩踏问题,十分影响效率,因此在实践中往往会选择更加优秀的 开散列,哈希表(开散列)又叫做 哈希桶,作为被选中的结构,我们需要对其进行改造,完善哈希桶,使其最终能封装出与。原创 2024-06-05 10:00:00 · 1363 阅读 · 15 评论 -
【C++】哈希应用之位图
位图(bitset)是一种特殊的数据结构,仅仅依靠01表示当前位置是否有数据存在,常用于对查找速度和存储空间有着高要求的场景中,除此之外,位图还可以配合宏定义,实现同时传递多个参数,比如系统调用open,其中的参数2(打开方式)就是一个简单的位图结构位图是一种十分特殊的数据结构,其主要依靠0和1表征状态,结合哈希的映射思想,即保证了速度,又保证了空间位图速度极快O(1)节省空间 使用粒度最细的比特位位图只能映射整型对于浮点符、字符串等数据无法做到很好的映射位图快速查找某个数据是否在一个集合中。原创 2024-06-06 16:33:39 · 1175 阅读 · 19 评论 -
【C++】哈希应用之布隆过滤器
注册账号是进行网络冲浪的第一步操作,而拥有一个具有个性且独一无二的用户昵称是非常重要的,很多人在填写昵称时,常常会看到此昵称已存在的提示,系统是如何快速知道当前昵称是否存在呢?总不能挨个去遍历对比吧,这时候就需要我们本文中的主角:布隆过滤器。原创 2024-06-11 00:42:39 · 964 阅读 · 34 评论 -
『C++11』基础新特性
自从C++98以来,C++11无疑是一个相当成功的版本更新。它引入了许多重要的语言特性和标准库增强,为C++编程带来了重大的改进和便利。C++11的发布标志着C++语言的现代化和进步,为程序员提供了更多工具和选项来编写高效、可维护和现代的代码1998年C++标准委员会成立后,计划每五年进行一次更新在2003年C++标准委员会提交了一份技术勘误表(简称为TC1),TC1主要是对C++98标准中的漏洞进行修复,其语言的核心部分并没有大改动,这次提交可以看作一次小小的语法更新,即C++03。原创 2024-06-17 11:22:20 · 1273 阅读 · 51 评论 -
『C++11』右值引用 || 完美转发 || 新增类功能 || 可变参数模板
自从C++98以来,C++11无疑是一个相当成功的版本更新。它引入了许多重要的语言特性和标准库增强,为C++编程带来了重大的改进和便利。C++11的发布标志着C++语言的现代化和进步,为程序员提供了更多工具和选项来编写高效、可维护和现代的代码在学习右值引用之前,需要先来看看左值引用引用是C++相对于C语言 的升级点之一,引用既能像指针那样获取资源的地址,直接对资源进行操纵,也不必担心多重引用问题,对于绝大多数场景来说,引用比指针好用得多引用。原创 2024-06-23 10:38:34 · 998 阅读 · 33 评论