- 博客(41)
- 收藏
- 关注
原创 【C++语法】手写堆与有关堆的容器/函数
本文介绍了C++中堆的实现与相关容器/函数。主要内容包括:(1) 手写堆的实现方法,详细讲解了堆的构建、插入、删除和获取堆顶操作;(2) STL中的优先队列priority_queue,说明其定义方法和自定义比较器的实现;(3) algorithm中与堆相关的函数,如make_heap等。文章提供了完整的代码示例和复杂度分析,帮助读者理解堆的基本操作及其在C++中的实现方式。
2025-08-16 16:12:40
1043
原创 【C++语法】布尔值、判断与选择
本文介绍了C++中的布尔值、判断表达式和选择语句。主要内容包括:布尔类型(bool)的定义及使用,true/false常量;6种大小比较运算符和3种逻辑运算符(&&、||、!)的使用;if-else、switch等选择语句的语法结构;以及三目运算符(?:)的用法。文章通过代码示例详细说明了各种语法结构的应用场景和使用方法,为C++初学者提供了基础的选择控制流程知识。
2025-08-14 19:38:29
1335
原创 【算法】堆(Heap)的概念、懒删除(Lazy Deletion)与堆排序(Heap Sort)
本文介绍了堆(Heap)数据结构的概念、操作及其应用。堆是一种完全二叉树,分为大顶堆和小顶堆,具有高效的插入、删除和查询操作。堆的存储采用顺序表,通过特定公式访问父子节点。堆的操作包括构建(O(n))、插入(O(log n))、删除堆顶(O(log n))和访问最大值(O(1))。 文章还介绍了堆的懒删除技术,通过标记删除状态实现延迟删除,支持删除特定插入顺序的元素或特定值。最后提到堆排序,利用堆的特性实现高效排序。堆结构在数据处理和算法设计中具有重要应用价值。
2025-08-12 12:23:40
1600
1
原创 【C++语法】输出的设置 iomanip 与 std::ios 中的流操纵符
本文详细介绍了C++中iomanip和std::ios提供的格式化输出方法。iomanip包含多种流操纵符,用于控制输出的对齐方式(setw、left/right)、小数精度(fixed、setprecision)、进制转换(hex、oct)以及布尔值显示(boolalpha)等。同时还介绍了std::ios中的格式设置函数resetiosflags和setiosflags,可实现格式重置和叠加。这些工具能有效提升C++输出的格式化控制能力,适用于各种数值和文本的精确显示需求。
2025-08-11 13:44:20
1012
原创 【算法】图的 深度优先搜索(DFS)与 广度优先搜索(BFS)
本文介绍了图的两种基本遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)。DFS采用递归方式实现,沿着一条路径深入探索直至无路可走再回溯,适用于寻找所有可能路径;BFS利用队列实现分层扩展,保证找到最短路径,适用于迷宫求解等问题。两种算法都需要标记已访问节点防止重复遍历。文章通过图示和代码示例(包括邻接表存储和迷宫求解)详细说明了它们的实现原理和应用场景,并指出了编程实现中的关键点与常见错误。
2025-08-10 20:10:54
1103
1
原创 【C++语法】加减乘除模 与 类型的强制转换
本文介绍了C++中的基本运算符和类型转换。主要内容包括:(1) 四则运算和取模运算的优先级规则及使用场景,特别是整数与浮点数除法差异;(2) 取整运算的多种实现方法,包括向上取整、向下取整、四舍五入的数学公式和库函数方案;(3) 取模运算在不同语言中的行为差异及实现真模运算的方法;(4) C/C++中的强制类型转换语法,包括C风格的转换和C++提供的四种转换方式(static_cast、dynamic_cast等),并比较了它们在安全性和使用场景上的区别
2025-08-04 20:47:45
974
原创 【C++那些趣事】如何让输出的内容变色
这篇文章介绍了在C++中如何为控制台输出添加颜色效果。对于Windows系统,需要包含windows.h头文件,使用SetConsoleTextAttribute()函数并通过三基色常量或颜色编号来设置文本和背景颜色。Linux系统则使用特殊的ANSI转义序列实现颜色输出。文章还提供了具体的代码示例和颜色编号对照表,并指出这些方法在不同系统和环境中的兼容性差异。需要注意的是,这些颜色设置会影响后续所有输出,且效果可能因控制台主题而异。
2025-07-31 08:00:00
616
原创 【C++语法】浮点型与 scanf 和 printf
本文介绍了C/C++中的浮点数类型及输入输出函数scanf和printf的使用。主要内容包括:(1) 三种浮点类型float、double和long double的存储范围与精度;(2) printf的格式化输出语法,包括不同类型数据的格式标识符和填充规则;(3) scanf的格式化输入语法,强调变量前需加&;。文章配有代码示例,展示了如何使用这些函数进行浮点数的输入输出操作。这些函数既适用于C语言也适用于C++,且无需使用命名空间。
2025-07-30 11:11:15
839
原创 【算法】图的存储
本文介绍了三种图的存储方式: 邻接表:使用静态数组套动态数组结构,适合表示稀疏图,空间利用率高,但查询效率较低。可支持带权图,通过结构体存储邻接点和边权。 邻接矩阵:使用二维数组直接表示节点间连接关系,适合稠密图,查询效率高但空间复杂度为O(V²)。对角线元素为0,无边用∞表示。 边表(链式前向星):使用一维数组存储边信息,结合头指针数组,空间复杂度为O(E),适合需要频繁遍历边的场景。通过倒序连接实现高效遍历。 三种方法各有利弊,应根据具体应用场景选择合适的存储结构。
2025-07-25 21:45:17
746
1
原创 【C++语法】整型与 std::cin 和 std::cout
本文介绍了C++中基本的输入输出语法和使用方法。主要内容包括:(1) 整型变量的定义方式及存储范围;(2) cout的使用方法,包括字符串、字符、数字的输出以及变量代入;(3) cin的输入方法;(4) C++输入输出加速器的使用。文章通过具体代码示例详细讲解了这些基础语法,并强调了编写C++程序时的基本框架和注意事项,如主函数结构、命名空间使用等,适合初学者学习C++的基本输入输出操作。
2025-07-24 16:40:41
1448
原创 【DEV-C++配置】你好,C++
本文介绍了C++编程入门指南,重点讲解了Dev C++开发环境的配置与使用。主要内容包括:(1)推荐使用轻量级的Dev C++作为开发工具;(2)将英文界面切换为中文的步骤;(3)可选设置缺省源代码模板;(4)配置编译器支持C++14标准及O2优化;5)常用快捷键说明;6)演示第一个Hello world程序。文章旨在帮助初学者快速搭建C++开发环境,掌握基础操作,迈出编程学习的第一步。
2025-07-20 14:50:18
977
原创 【算法】图的定义与一些常用术语
本文介绍了图论的基本概念和术语。图由节点集合V和边集合E组成,比树结构更灵活,允许任意连接。主要术语包括:边权、有向图/无向图、路径/途径、环/重边/自环、度/入度/出度、联通分量、弱/强连通、稀疏/稠密图等。还介绍了四联通和八联通在迷宫问题中的应用及编程实现方式。这些基础概念为图论算法学习提供了必要准备。
2025-07-20 10:10:52
736
1
原创 (三十三)队列(queue)
形象点儿说,队列相当于学校的排队的食堂,先来排队的先得到饭,然后先走;后来排队的最后得到饭,最后走。STL 专门提供了关于栈和队列的容器,还拓展了一个双向队列(deque)三个库均可使用导入这是 STL 独有的专属容器,它也有队头和队尾,但插入和删除可以同时进行。形象一点就是医院的“军人优先”。还是一个队列,普通人往后排,军人们有可以排在前面的特权。因此,队头可以插入删除,队尾也可以。
2024-11-15 21:59:01
1166
原创 (三十)二分查找(Binary Search)
大多数人在小时候应该都玩过数字扫雷。比如在1-100中任意选择一个数字作为雷,比如82,第一个人从50开始查找,裁判会说“数字小了”,第二个人就得说一个50-100的数字,比如75,裁判宣布“太小了”。第三个人从75-100选择一个数,90,“太大了”,第四个人在75-90之中选择一个数字88,“太大了”。第五个人75-88选择80,“太小了”,直到第X人猜测的数字等于那个数字,裁判就宣布“第X个人踩雷了”。这就是一个简单的二分查找。
2024-09-07 11:41:03
1303
原创 (二十八)STL set容器(集合)
总之来说不管是C/C++还是python,foreach都是一个良心玩意,直接把复杂的for循环简化了。第一行表示它的类型(一般用class类型表示这个主类的类型,也可以把。对了,set容器默认从小到大,怎么变为从大到小呢?在C++中基于容器迭代器的遍历给出了一种新的。一样的,他的迭代器类型是这个。)还是静态数组它们都有这个语法。,说明这个就是从小到大的排序器。),但一般排序用的函数统一类型。),还是老老实实的用迭代器(第二行表示它的排序器,默认为。这是set容器定义时的模版。我们可以发现比较器类型是。
2024-09-01 12:01:10
2026
原创 (二十七)递推
递推是递归的进阶,递归用函数来递,而递推用循环来递。递归的缺点是时间复杂度高,而递推专门来克制这个问题。递推有两种推法:顺推和逆推。顺推就是从前往后推,逆推就是从后往前推。递归和递推最有意思的那就是找递推式。看下面的递推题。
2024-08-31 12:48:25
1193
原创 (二十六)STL vector容器(动态数组)
对于操作1,接下来两个数X,Y,表示在第X个数之后插入一个数Y,保证0≤X≤当前数的个数,若X=0,表示在数组开头插入。第一行两个整数N,M(N,M≤1000),N表示数组中一开始有N个数,M表示M次操作。开学了,有40个学生来报名,想要存储每个同学的姓名,可以使用静态数组存储。对于操作2,接下来一个数X,表示要删除第X个数,保证1≤X≤当前数的个数。给定一个N个数的数组,M次操作,每次操作为下列操作之一。开学了,未知有多少个同学,要存储每个同学的姓名,可以使用动态数组存储。输出若干个数,表示最后的数组。
2024-08-26 12:53:25
1165
原创 (二十五)递归
同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图中的C点和P1,……,P8,卒不能通过对方马的控制点。“马”下过象棋的都知道走日字格,可以看作走在(x+1,y+2), (x+2,y+1), (x-2,y-1), (x-1,y-2), (x+1, y-2), (x+2, y-1), (x-1, y+2), (x-2, y+1)的位置,这里还规定“卒”不能吃“马”,因此还要加上(x, y)的位置。害羞的强哥藏起了答案,聪明的你能算出他的战斗值吗。
2024-08-04 12:22:11
822
原创 (二十四)进阶算法
段错误(segmentation fault)可以理解为函数内的变量占用字节太大了,也可能是访问了野指针(指向。,从2开始看(因为1不是质数也不是合数),2是质数,筛选掉所有是2的倍数的数,它们是合数,随后看下一个没有被筛掉的数:3,再来筛掉,然后看数字5,把数字五的倍数筛掉…经过12天的“魔鬼集训”,我又回来更新了。我们可以仿造埃氏筛,做一个用于存储数值的数组。函数外,一是无法访问,二才是段错误。筛到不能筛时,就不可能被。质数表和质数筛都得放在。但是这样会重复算一些数字。时,可以先不考虑筛掉。
2024-07-28 20:28:52
1233
原创 (二十三)高精度运算
这次,高精度帖子,它来了!还记得C++的类型吗?int类型最多可以存储10位数(到十亿),就连long long类型最多也只能存储20位数(到一千京),因此short类型的存储最大值可怜得只有5位(到一万),而强大的高精度比long long类型大好几十倍。因为这种数很大,因此有一种叫法——大数。高精度数没有办法直接加减乘除,应该怎么办呢?指针与迭代器位运算与进制联合体(union)类(class)二十三:高精度运算二十四:算法进阶二十五:递归vector容器二十七:递推set容器。
2024-07-12 13:18:18
3259
原创 (二十二)类(class)
你见过类吗?就以猫为例,普通的猫喜欢舔毛、半夜睡不着,猫有它的岁数,颜色,依靠这些属性(长什么样)与方法(怎么做),便做出了猫类。猫也有很多特殊特征,病猫、凶猛的猫、只有两条腿的猫,甚至是会唱歌的猫……这就是一个类的构造前言提到,类中有属性和方法两类,具体定义方法如下class T {.........}Users;一样的,structunion和class都不要把后面的分号丢了,因为这填的是使用者列表publicprivate和protectedpublic。
2024-07-11 13:20:13
971
原创 (二十一)联合体(union)
你见过一个联合吗?假如我们以弓箭手值班为例,他们轮流值班,而不是一齐值班,这就是一个联合体。在说道联合体union的时候,就不得不回忆一下结构体struct了,它的定义是这样的int num;char sex;在定义联合体时也一样,只不过关键字struct要改为union,就像这样int num;char sex;这次本来打算连着类class和union写了,但union的篇幅有点大,所以我打算分段写指针与迭代器位运算与进制二十一:联合体(union二十二:类(class。
2024-07-08 16:41:22
1043
原创 (二十)位运算与进制
你听说过进制吗?你知道进制怎么表示吗?你知道进制如何转换吗?这篇帖子就能get进制。另外,在二进制中,我们还会用到位运算符号只有0和1两个数字,加法遵循“逢二进一”的原则,减法遵循“借一为二”原则。二进制数101001010100101010010写作10100102101001020b10100100b10100100b1010010或1010010B1010010B1010010B。这是计算机中经常使用的,因此使用位运算会大大降低运算复杂度。
2024-07-07 12:39:07
1635
原创 (十六)functional 与 lambda [](){}
这个库是用于存储函数的库,定义方法类似于后期定义STL容器的方法//定义一个函数变量,并执行Funct的操作,List中填的是原函数参数列表Typ中还可以填auto这个关键字,表示现在不确定类型,但必须在定义后赋值!如果你在DEV中执行失败,就点这里的蓝色字体int t = a;a = b;b = t;//让swap代替f执行函数swap(a, b);return 0;
2024-07-02 21:35:45
820
原创 (十一)二维静态数组
假如说一个变量是一个点,那么一个一维数组就是一条线,二维数组就是一个面这里还是下标原则//定义一个xs*ys大小的二维数组,不赋值//定义一个二维数组,填了多少值就有多少大小//定义一个xs*ys大小的二维数组并全部赋值为0。
2024-06-23 13:18:13
311
转载 (八)一维静态数组
Typ arr[n];//定义一个类型为Typ的数组arr,设置大小为n,并设置每个值为随机数(其实不是随机的)//定义一个类型为Typ的数组arr,设置大小为n,并设置每个值为0//定义一个类型为Typ的数组arr,根据被赋值的值的个数来分辨大小注意:在c++的数组,下标从0开始,假如定义了一个共5项数组arr分别为。那么1的下标为0,2的下标为1,……,5的下标为4。因此c++中的第n项实际指现实的n-1项。
2024-06-22 10:07:11
164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅