- 博客(47)
- 收藏
- 关注
原创 蓝桥杯十一届C++B组真题题解
【问题描述】小蓝要为一条街的住户制作门牌号。这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个字符 0, 2 个字符 1, 1 个字符 7。请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。
2025-04-09 08:57:19
697
原创 蓝桥杯十三届C++B组真题题解
九进制正整数 (2022), 转换成十进制等于多少?这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
2025-03-24 21:22:37
594
原创 蓝桥杯十四届C++B组真题题解
【问题描述】小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素从左至右如下所示:现在他想要从这个数组中寻找一些满足以下条件的子序列:1.子序列的长度为 8:2.这个子序列可以按照下标顺序组成一个 yyy,ymmdd 格式的日期,并且要求这个日期是 2023 年中的某一天的日期,例如 20230902,20231223。yyyy 表示年份,mm 表示月份,dd 表示天数,当月份或者天数的长度只有一位时需要一个前导零补充。
2025-03-20 20:22:08
1106
原创 Linux项目自动化构建工具-make/Makefile
会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
2025-03-16 21:57:50
605
原创 Linux环境安装基础工具使用
gcc code.c -o code -DM:会在源文件命令行中动态添加宏Mgcc code.c -0 code -DM=100 将M的值设置为100这是因为。
2025-03-15 14:04:10
633
原创 C++并查集的功能以及实现详解
在此过程中要反复用到查询某一 个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为比如:某公司今年校招全国总共招生10人,西安招4人,成都招3人,武汉招3人,10个人来自不 同的学校,起先互不相识,每个学生都是一个独立的小团体,给以下数组用来存储该小集体,数组中的数字代表:该小集体中具有成员的个 数。(负号下文解释)
2025-03-15 12:06:26
231
原创 C++智能指针
这样保障了资源的正常 释放,避免资源泄漏问题。• 智能指针类除了满足RAII的设计思路,还要方便资源的访问,所以智能指针类还会想迭代器类⼀ 样,重载 operator*/operator->/operator[] 等运算符,方便访问资源。• 智能指针实际上是代管资源,是模拟指针的行为,和平常使用的树,链表等等不一样,在这些数据结构中我们拷贝对象是想获取内容,而指针不一样,指针是访问修改资源,而不是拥有资源,所以智能指针拷贝是共同管理资源,是多个指针共同指向同一个对象,是浅拷贝。
2024-12-19 15:58:30
873
原创 C++异常
・异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后解决问题的任务传递给程序的另⼀部分,检测环节无须知道问题的处理模块的所有细节。・C 语言主要通过错误码的形式处理错误,错误码本质就是对错误信息进行分类编号,拿到错误码以后还要去查询错误信息,比较麻烦。
2024-12-17 12:53:00
813
原创 C++11语法解析(二)
C++11 支持可变参数模板,也就是说支持可变数量参数的函数模板和类模板,可变数目的参数被称为参数包,存在两种参数包:模板参数包,表示零或多个模板参数;函数参数包:表示零或多个函数参数。例如我们在C语言中使用的printf和scanf,它们都是支持传不同个数和类型的参数・template void Func (Args... args) {}・template void Func (Args&... args) {}
2024-12-15 22:46:37
792
原创 哈希表实现
哈希(hash)又称散列,是一种组织数据的方式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字 Key 跟存储位置建立一个映射关系,查找时通过这个哈希函数计算出 Key 存储的位置,进行快速查找。
2024-12-09 19:56:35
1252
原创 unordered_map与unordered_set封装
SGI-STL30版本源代码中没有 unordered_map 和 unordered_set,SGI-STL30版本是 C++11 之前的 STL 版本,。但是 SGI-STL30 实现了哈希表,只容器的名字是 hash_map 和 hash_set,他是作为非标准的容器出现的,非标准是指非 C++ 标准规定必须实现的,源代码在 hash_map/hash_set/stl_hash_map/stl_hash_set/stl_hashtable.h 中、
2024-12-08 23:03:25
374
原创 c++11语法解析(一)
C++11是C++的第⼆个主要版本,并且是从C++98起的最重要更新。它引入了大量更改,标准化了既有实践,并改进了对C++程序员可用的抽象。在它最终由ISO在2011年8⽉12⽇采纳前,⼈们曾使用名称“C++0x”,因为它曾被期待在2010年之前发布。C++03与C++11期间花了8年时间,故而这是迄今为止最长的版本间隔。从那时起,C++有规律地每3年更新⼀次。
2024-12-08 21:19:33
886
原创 红黑树实现
红黑树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表示结点的颜色,可以是红色或者黑色。通过对任何⼀条从根到叶子的路径上各个结点的颜色进行约束,红黑树确保没有⼀条路径会比其他路径长出2倍,因而是接近平衡的。
2024-11-01 15:17:35
760
原创 AVL树详解
AVL树是最先发明的自平衡二叉查找树,AVL是⼀颗空树,或者具备下列性质的二叉搜索树:它的左右子树都是AV树,且左右子树的高度差的绝对值不超过1。AVL树是⼀颗高度平衡搜索⼆叉树, 通过控制高度差去控制平衡。AVL树得名于它的发明者G.M.Adelson-Velsky和E.M.Landis是两个前苏联的科学家,他们在1962 年的论文《Analgorithm for the organization of information》中发表了它。
2024-10-28 11:18:53
1050
原创 Linux权限说明
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含: 将使用者的命令翻译给核心(kernel)处理。 同时,将核心的处理结果翻译给使用者。
2024-10-19 12:19:23
673
原创 Linux基本指令
Linux在服务器领域的发展 随着开源软件在世界范围内影响力日益增强,Linux服务器操作系统在整个服务器操作系统市场格局中占据了越来越多的市场份额,已经形成了大规模市场应用的局面。并且保持着快速的增长率。尤其在政府、金融、农业、交通、电信等国家关键领域。此外,考虑到Linux的快速成长性以及国家相关政策的扶持力度,Linux服务器产品一定能够冲击更大的服务器市场。 据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,
2024-10-16 15:31:15
667
原创 c++ map
map的声明如下,Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key支持小于比较,如果不支持或者需要的话可以自行实现仿函数传给第⼆个模版参数,map底层存储数据的内存是从空间配置器申请的。⼀般情况下,我们都不需要传后两个模版参数。map底层是用红黑树实现,增删查改效率是O(logN) ,迭代器遍历是走的中序,所以是按key有序顺序遍历的。
2024-09-25 10:55:10
1231
原创 c++ set
前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这 些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间⼀般没有紧密的关联关系,比如交换⼀下,他依旧是序列式容器。顺序容器中的元素是按他们在容器中的存储位置来顺序保存和访问的。 关联式容器也是用来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是非线性结构, 两个位置有紧密的关联关系,交换⼀下,他的存储结构就被破坏了。
2024-09-24 23:37:37
827
原创 c++二叉搜索树
⼆叉搜索树又称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树:• 若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值• 若它的右子树不为空,则右子树上所有结点的值都大于等于根结点的值• 它的左右子树也分别为⼆叉搜索树• 二叉搜索树中可以支持插入相等的值,也可以不支持插入相等的值,具体看使用场景定义
2024-09-21 18:12:56
1030
原创 c++多态
多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态),这里我们重点讲运行时多态,编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要就是我们前面讲的函数重载和函数模板,他们传不同类型的参数就可以调用不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时⼀般归为静态,运行时归为动态。
2024-09-18 15:58:51
1164
原创 C++继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称子类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。
2024-09-13 09:06:23
802
原创 c++进阶模板
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有 目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2024-09-09 22:31:56
865
原创 C++deque
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为 容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认 使用deque,
2024-09-08 11:53:20
1021
原创 C++ priority_queue
优先级队列是一种容器适配器,专门设计使其第一个元素始终是它包含的元素中最大的,根据一些严格的弱排序标准。此上下文类似于堆,其中元素可以随时插入,并且只能检索最大堆元素(优先级队列中位于顶部的元素)。
2024-09-08 11:38:58
337
原创 c++stack和list 介绍
堆栈是一种容器适配器,专门设计用于在 LIFO 上下文(后进先出)中运行,其中元素仅从容器的一端插入和提取。堆栈作为容器适配器实现,容器适配器是使用特定容器类的封装对象作为其基础容器 的类,提供一组特定的成员函数来访问其元素。元素从特定容器的“back”推送或弹出,这称为堆栈的顶部。1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元 素,另一端提取元素。
2024-09-07 20:40:39
900
原创 c++list
列表是序列容器,允许对序列中任意位置的恒定时间插入和擦除操作,以及双向迭代。列表容器被实现为双向链表;双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。排序在内部通过与指向其前面的元素的链接和指向其后元素的链接的每个元素的关联来保持。它们与 forward_list 非常相似:主要区别在于 forward_list 对象是单链表,因此它们只能向前迭代,以换取更小、更高效。与其他基本标准序列容器(array、vector 和 deque)相比,列表在容器中已经获得迭代器的任何位置插入、
2024-09-03 20:20:19
480
原创 vector介绍
vector与c语言中的数组类似,是数组的进阶,它能够根据需求改变自身的长度,就像数组一样,vector对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问它们的元素,并且与在数组中一样高效,但与数组不同的是,它们的大小可以动态变化,其存储由容器自动处理。
2024-09-01 15:34:00
1399
原创 C++ string(一)
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。
2024-08-08 15:08:23
653
原创 c++初阶模板
使用函数重载虽然可以实现,但是有一下几个不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数2. 代码的可维护性比较低,一个出错可能所有的重载均出错。那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?
2024-08-04 15:23:13
792
原创 C++内存管理
1. 栈又叫堆栈--等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。3. 堆用于程序运行时动态内存分配,堆是的。4. 数据段--存储。5. 代码段--。6.大小,而一般有7.在堆中频繁的申请空间和释放空间,容易造成内存碎片,甚至内存泄漏,栈区由于是自动管理,不存在此问题。
2024-08-03 18:00:45
872
原创 C++类和对象(下)
之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有⼀种方式,就是初始化列表,初始化列表的使用方式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成 员列表,每个"成员变量"后面跟⼀个放在括号中的初始值或表达式。
2024-07-31 18:12:15
550
原创 C++类与对象(中)
默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认生成6个默认成员函数。默认成员参数很重要,也比较复杂,我们要从两个方面去学习:第⼀:我们不写时,编译器默认生成的函数行为是什么,是否满足我们的需求。第二:编译器默认生成的函数不满足我们的需求,我们需要自己实现,那么如何自己实现?
2024-07-26 11:14:34
523
原创 C++类和对象(上)
class为定义类的关键字,{}中为类的主体,注意类定义结束时后面分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或 者成员函数。为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前面或者后面加_或者m 开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。C++中struct也可以定义类。
2024-07-22 11:17:26
765
原创 c++入门基础
C++的起源可以追溯到1979年,当时Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地方可能有差异)在贝尔实验室从事计算机科学和软件⼯程的研究⼯作。面对项目中复杂的软件开 发任务,特别是模拟和操作系统的开发⼯作,他感受到了现有语言(如C语言)在表达能力、可维护性和可扩展性方面的不足。
2024-07-19 12:03:42
540
原创 C语言数据结构堆排序
堆排序是一种树形选择排序,在排序过程中,将待排序的记录看成一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序的序列中选出关键字最大或最小的记录。堆分为大堆和小堆,大堆就是根节点比所有结点要大的完全二叉树,小堆就是跟结点要比所有结点要小的完全二叉树。实现堆排序需要解决一下问题:1.如何将一个无序序列建成一个堆2.去掉堆顶元素,在堆顶元素改变之后,如何调整剩余元素成为一个新的堆。降序需要建小堆,升序建大堆,这里作者的堆排序为降序,建小堆。
2024-07-15 23:27:47
207
1
原创 C语言数据结构初阶排序(上篇)
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次 序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。:数据元素全部放在内存中的排序。:数据元素太多不能同时放在内存中,根据排序过程的要求不断地在内外存之间移动数据的排序。
2024-07-15 21:44:00
1225
原创 C语言队列的基本操作
和栈相反,队列(queue)是一种先进先出的线性表,它只允许在表的一段进行插入数据,而在另一端删除数据,这和生活中的排队时一致的,最早进入队列的元素最先离开,而在队列中,允许删除的一端叫队头。
2024-05-12 00:37:06
413
原创 C语言栈的基本操作
栈是一种限定仅在表尾进行插入或删除的线性表,因此,对栈来说,,相应的,。栈中的元素遵循后进先出的顺序(Last In First Out),简称LIFO顺序。这里我们实现栈的基本操作实用的是链表,更方标栈插入和删除数据。
2024-05-11 19:28:21
389
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人