- 博客(54)
- 收藏
- 关注
原创 求1000以内所有素数并输出的几种方法
今天咱们来点不一样的,来看一下这样的一道题目,他要求我们把1-1000的素数全部找到并且输出那我们先要了解什么是素数,所谓素数,就是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。而合数则恰巧与素数相反,是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。
2023-03-13 23:48:38
7668
原创 C++11特性学习 Day4
本文介绍了C++中的function模板和智能指针技术。function模板可以统一包装函数、函数指针、Lambda表达式和仿函数,通过类型转换将其统一为function类型,便于管理调用。bind函数用于绑定可调用对象及其参数,支持占位符和参数重排。智能指针部分详细讲解了auto_ptr(已废弃)、unique_ptr(独享所有权)和shared_ptr(引用计数共享)的实现原理和使用方法,包括reset()、release()等接口的特殊行为。通过示例代码展示了这些技术在函数包装、对象成员绑定和资源管理
2025-07-24 14:35:24
550
原创 C++11特性学习 Day3
摘要:本文介绍了C++11中枚举类(enum class)、断言机制和右值引用的核心概念。枚举类通过作用域限定解决了命名冲突问题,并支持指定底层类型。断言分为运行时(assert)和编译时(static_assert)两种。右值引用(&&)实现了移动语义,通过移动构造和移动赋值避免不必要的拷贝,提升性能。文章还详细讲解了移动语义的实现原理、std::move的用法以及需要注意的悬垂引用问题,最后比较了右值引用与万能常引用的区别。这些特性共同构成了现代C++高效编程的重要基础。(150字)
2025-07-23 14:53:59
984
原创 C++11特性学习 Day2
本文介绍了C++中的initializer_list初始化方式和类型推导工具auto与decltype的使用。首先展示了使用初始化列表对数组、vector、list和map进行初始化的多种语法形式,包括={}、{}和({})三种方式。然后详细讲解了auto和decltype的类型推导机制,比较了两者对字符串常量推导的差异(decltype推导为数组类型,auto推导为指针),并演示了它们与typedef的结合使用。文章还介绍了尾返回类型推导、仿函数实现以及Lambda表达式的基本语法和捕获列表配置,最后展示
2025-07-23 14:47:04
251
原创 C++11特性学习 Day1
本文介绍了C++11引入的几个关键特性:1) nullptr关键字明确区分空指针与整型0;2) override和final关键字分别用于标识重写函数与阻止继承/重写;3) default和delete关键字控制默认函数和禁用函数;4) 原生字符串(raw string)简化转义字符处理;5) 范围for循环(auto-for)简化容器遍历。文中通过代码示例展示了这些特性的具体用法,如final禁止类继承、delete禁用析构函数等,体现了C++11在类型安全、代码控制和语法简化方面的改进。
2025-07-22 19:11:56
176
原创 qt基础知识详解及案例分析
本文介绍了Qt项目开发中的关键技术与概念,主要内容包括: Qt项目文件(.pro)的组织结构,包括模块添加、编译器配置、源文件/头文件/资源文件管理 Qt容器类的选择与使用,如QVector、QList、QMap、QHash等,分析各自特点与适用场景 元对象系统与信号槽机制,包括Q_OBJECT宏、MOC编译器工作原理 多线程编程,包括QThread的使用、线程安全与QMutex锁机制 Qt对象树模型,讲解父子对象关系及内存管理机制 常用组件如QTimer定时器、HTTP请求、XML/JSON读写等 文章还
2025-07-22 17:45:47
1283
原创 C++回顾 Day8
本文系统讲解了C++面向对象编程中的多态机制。首先介绍了赋值兼容原则,即派生类对象可替代基类对象,这是实现多态的基础。重点分析了动态多态的实现条件:基类需包含虚函数,派生类需覆写虚函数,并通过基类指针调用。通过shape类示例展示了虚函数表的工作原理。详细说明了纯虚函数和抽象基类的特性,强调抽象基类不能实例化但可提供接口。特别指出当存在虚函数时必须实现虚析构,以确保多态对象的完整析构。最后通过设计模式示例阐述了依赖倒置原则,即高层和底层都应依赖抽象接口。文章还简要提及了模板编程的概念。
2025-07-15 21:22:32
938
原创 C++回顾 Day7
子类构造前必先调用父类构造器,无参构造可隐式调用,有参则需显式;子类默认拷贝/赋值构造会调用父类对应函数,自实现则用自实现的。继承不继承友元关系,析构顺序与构造相反。public继承接口与数据,protected只传承数据,private都不继承。多继承或致冗余数据与使用不便,可用虚基类与虚继承解决,将共有部分提取到虚基类,子类虚继承,确保数据唯一、访问无冲突。示例展示了多继承中虚继承避免冗余,确保数据一致性。
2025-07-15 21:18:31
537
原创 C++回顾 Day6
本文总结了C++运算符重载的相关知识点,主要包括:1. 运算符重载的基本规则:三目运算符不能重载,部分运算符只能重载为成员函数;2. 流运算符(<<和>>)重载的实现方法及注意事项;3. 类型转换构造函数和类型转换运算符的区别与实现;4. 函数调用运算符()的重载(仿函数);5. 智能指针的实现原理;6. 继承关系中构造函数的调用规则。文章通过代码示例详细说明了各种运算符重载的具体实现方式,并强调了const修饰符、友元声明等关键细节,为C++运算符重载提供了全面的实践指导。
2025-05-26 11:49:53
986
原创 C++回顾 Day5
都是可以满足的,但是对于(a+=b)+=c,基本数据类型是可以的,是先a += b,再a += c,但是对于我们的类来说,这是不可以的,因为a += b,返回的新的a在栈上,马上就会消失,再执行a += c时a已经是之前的a了,所以要使用&,使得a的变化被接收到,改为sett &operator+=(const sett& another);但是,对于非静态成员函数,情况就不同了。友元关系是单向的,a是b的友元,a可以访问b的private类成员,但是b不可以访问a的private类成员。
2025-05-07 20:34:00
735
原创 C++回顾 Day4
my_class_type& operator=(const my_class_type & another)不加上my_class_type后的&会导致(a=b)=c本来应该是a为c的大小,但是这里会变成b的大小,因为不返回引用就需要在栈上创建一个新的对象以保存中间变量,但是栈很快就会销毁,导致无法传回。传参或者函数返回对象(对于普通对象,传引用效果不明显,但对于类对象,传引用可以比传参少进行一次拷贝构造和析构)栈上的对象是可以返回的(会产生一个中间变量去接收,即使这个函数中的变量消亡也不影响)
2025-05-07 20:27:47
430
原创 配置maven环境保姆级教程
e.g.:<localRepository>本地仓库绝对路径</localRepository>6. 打开apache-maven-3.9.9\目录下的settings.xml文件进行编辑。10.配置新项目的默认设置,确保打开新项目后仍旧是之前的maven环境设置(具体方法同上)5. 提前设置一个文件夹maven-localrepository作为本地仓库。
2025-04-09 15:36:48
667
原创 C++回顾 day2
对于二维数组的创建也是一样的,前面是一个指向一维数组的指针,然后后面是一个二维数组的首地址,同样由于连续存储所以这样写也是可以的。与 int 结合,表示数组中的每个元素都是一个指向 int 类型的指针。函数多使用const 类引用,可以防止无意修改数据的错误,可以接收const与非const变量,还可以正确生成并使用临时变量(如果传入非本类型的参数或者常数、表达式都可以进行处理,保证程序的健壮性)const类型的数据必须使用const类型的引用去绑定,但是非const类型的可以使用const类型的引用。
2025-03-21 09:00:16
413
原创 C++回顾 day1
double 既可以转换为 int(截断)也可以转换为 float(精度损失),但这两者都是 标准转换(Standard Conversion),所以编译器无法决定哪一个更合适,导致 二义性错误。但是,如果你尝试直接输出一个指向字符串字面量的指针,并且你的编译器和环境支持将指针指向的字符串字面量直接作为字符串输出(这是许多C++编译器和标准库实现的一个常见但非强制的行为),那么输出可能会是字符串本身而不是地址。然而,根据C++标准,直接输出一个字符指针应该输出指针的值(即地址),而不是它指向的字符串内容。
2025-03-19 22:53:31
1016
原创 蓝桥题库-3865-Alice和Bob的爱恨情仇
前面有偶数个奇数堆,最后是奇数堆或者前面有奇数个奇数堆,最后是偶数堆(饼干总数均为奇数)前面有偶数个奇数堆,最后是偶数堆或者前面有奇数个奇数堆,最后是奇数堆(饼干总数均为偶数)所以这道题也是一样的,我们可以根据每次题目所给我们的数据来提前锁定最终的答案;一堆饼干有奇数个 先手的先拿完 先手角色反转。所以有多少个奇数堆,先手角色就会反转多少次。奇数个奇数堆 才使得先手角色反转。除去最后一个堆,前面有偶数个奇数堆时。除去最后一个堆,前面有奇数个奇数堆时。最后是奇数 则后手赢。
2024-10-29 18:55:03
296
原创 map基础知识
与 set 和 multiset 的差别一样;是无序的;与 unordered_map 类似,底层是由哈希函数实现的,其元素的插入、删除和查找的平均时间复杂度为O(1),但最坏时间复杂度都为O(n)!;
2024-04-18 21:06:29
618
原创 set基本知识
set 是一个用来存储同类型唯一元素的容器,并按照一定规则进行排序,set 中的元素是默认按照升序进行排列的;class set;Key 表示存储在 set 里面元素的类型;Compare 表示函数比较类型,默认为 less(升序排列),可以改为 greater (降序排列);Allocator 表示函数用于分配器的类型,默认为 allocator ,可以缺省;注意:set 中的元素是唯一的,即不允许重复元素存在,故此向其中插入重复元素时 set 会自动忽略该元素;
2024-04-18 21:05:05
1853
2
原创 queue基础知识
默认情况下,priority_queue() 按照元素从大到小进行排序,即最大的元素在队列最前面,为 top()值;其中T表示 stack 中存放的数据类型;Contaier:表示底层容器的类型,默认参数;Compare:比较函数,默认为less,即按照从大到小的。
2024-04-17 22:03:16
1083
原创 stack基础知识
stack 是一种后进先出(LIFO)的数据结构其中T表示 stack 中存放的数据类型;Contaier:表示底层容器的类型,默认参数;
2024-04-17 22:00:23
299
原创 list基础知识
list 是双向链表,是C++的容器模板,其接收两个参数,即 list(a,b) 其中 a 表示指定容器中存储的数据类型,b 表示用于分配器内存的分配器类型,默认为 list ;list 的特点:双向性:由于是双向链表,每个节点都包含前一个节点和后一个节点的指针,故此可以在 O(1) 内实现对某个元素的插入、删除,但对于访问读取来讲就需要 O(n) 的时间;动态大小:类似于 vector ,其大小也会随着需求扩展或收缩,无需提前定义容器的大小;
2024-04-17 21:58:30
1010
原创 pair知识点简述
pair 是一个模板类,表示一对值的组合,位于 头文件中;pair 类模板有两个模板参数,T1和T2,分别表示第一个值和第二个值的类型;pair 类有两个成员变量,first 和 second,分别表示第一个值和第二个值;pair 类函数还有一些成员函数和特性,例如默认构造函数、带参数的构造函数、比较运算符重载等;
2024-04-16 15:25:16
734
原创 全排列(函数法)
next_permutation( ) 函数用于判断当前序列是否存在按照字典序变得更大一级的下一个序列;此函数会按照字典序进行重新排列,如果存在下一个序列,则将当前序列更改为下一个序列并返回一个 true 的 bool 变量,反之则会将序列变为第一个(即最小的)序列然后返回 false;根据字典序进行排序,1 2 3下来为1 3 2,在接下来依次是2 1 3,2 3 1,3 1 2,3 2 1;
2024-04-16 15:21:10
502
原创 字母大小写转换
tolower( ) 是将参数变为其对应的小写字母,如果其参数不是 char 类型的数据则不进行操作;这两个函数是用来检测参数(字符)是否为小写字母或者大写字母的,函数返回一个 bool 表示结果;注意:islower( ) 和 upper( ) 两个函数参数应当为 char 型变量,但。注意:“不进行操作指的并非不执行这个语句,而是。toupper( ) 同理;,字符串不可以设置为参数;
2024-04-14 18:11:04
554
原创 最值查找(函数法)
参数有三个,nth_element(a.begin() , a.begin()+n , a.end()) 其中第一个和第三个参数类同 min_element( ) 一样为排序的起点和终点,第二个参地址上的元素将处于正确位置,前面的数都比他小,后面的都比他大;min_element(st,end) 其中 st 表示的是列表中所寻找的范围的起点(可以是地址" (a+1,a+n+1) ",也可以是迭代器" (str.begin,str.end) ”),end 表示的是终点;(min和max一样,以max示例)
2024-04-14 17:15:13
429
原创 二分查找(函数法)
当一个序列中存在多个 target 值时,lower_bound( ) 所得到的是序列中第一个 target 值所在的下标a,upper_bound( ) 所得到的是序列中第一个大于 target 值所在的下标b,故此此序列下标 [a,b) 的所有数据均为 target;
2024-04-14 17:06:47
353
原创 如何用两个数组实现高精度下的阶乘之和
对于这道题目而言,大多数人一定会想到分别用高精度乘法和加法来实现阶乘和求和,这样的话又有些同学会想到要用模块化编程的思路来进行代码的完善——用两个函数来分别实现;然而,对于这道题还有另一种更加简洁方便的做法——用两个数组来进行实现,其中一个数组求解最新的阶乘,而另一个数组用来存放累加求得的和。洛谷 P1009[NOIP1998 普及组] 阶乘之和。以上就是我的AC代码了,希望对大家有帮助。
2023-09-20 10:45:30
154
原创 背包问题之01背包——以洛谷P1048 [NOIP2005 普及组] 采药为例
今天呢,我们来学一下背包问题中最为简单的01背包。大家学了这么长时间的编程,都知道0代表false为假,1代表true为真,故此01背包也就指代的是每种物品有且只有一个,对于每个物品只需要考虑选与不选两种情况的最简单易懂的背包问题。我们接下来就以洛谷的P1048 [NOIP2005 普及组] 采药为例给大家讲解一下01背包问题我们是如何解决的👇。
2023-03-30 03:59:11
895
原创 如何实现对数列取余后对不同类数据进行计数(包括sort和unique函数第三参数的用法)——以P4325 [COCI2006-2007#1] Modulo为例
主要的问题在于没有考虑如果第二位与第三位数字一样或者余数一样的情况,举个例子,如果这十个数是一个1和九个2,那么完成第一轮判断的时候我们的计数器就已经出了大问题了——很明显这里只有两个不同的数字,但是由于我们是在拿着1一直进行判断,后面的九个2每个都被记了一次,再加上一开始的1,此时的num已经成了10了,这是一个不写不知道,一写嘎嘎易错的点,希望大家应以为戒!其实要用sort+unique函数还是很简单的,直接在存储的时候就%42不就好了吗,何必要改变这两个的排序准则和判断相等的标准呢。
2023-03-27 23:44:39
506
原创 高精度算法是如何实现的(高精除低精)
除法和我们的减法类似,都会出现有多个前导零的情况,故此,我们依旧要使用while循环进行多次的判断,直到第一次读到非零的数字才开始输出,当然了,有的人可能会问,按是不是要加上输出的地方的数组下标要小于len_ans-1的条件了,那是当然,因为会有0除以某个非零数的情况!,就是从被除数的最高位开始,用这位去除以除数整体,得到商放在这个最高位的正上方,然后把余数放在最高位的正下方,第二步是将被除数的第二位放在刚刚得到的余数后面组成一个新数,再由这个新数除以输出……的存在,所以我们依旧有一步是要去除前导零。
2023-03-24 01:00:00
279
原创 高精度算法是如何实现的
在计算完之后我们要进行的事情就是对ans数组进行逆序输出,但是我们刚刚对len_ans的定义是加一的,那么就会出现最高位不需要进位,前面有0的情况,这个0我们将其称为前导零,那我们在逆序输出数组的时候就要判断一下是否有前导零的存在,有的话就要跳过那位,从下一位开始输出。我们拿到两个数就会就会像上面这样列出竖式逐个位数进行相加,而我们的高精度加法就是这样实现的,我们将输入的数字逐位地进行输入以存在数组里面,但是由于要进行逐位输入,故此我们需要以字符型的数据类型进行储存,稍后将其转化为对应的数字就可以了。
2023-03-22 22:44:28
192
原创 洛谷 P5715 【深基3.例8】三位数排序
今天继续学习排序的算法,这道题目是非常简单的,甚至不需要我们使用循环就可以完成!这么简单的题目就拿来水博客了(还是要好好讲解一下的)
2023-03-20 21:50:42
387
原创 洛谷 P3954 [NOIP2017 普及组] 成绩
今天的第三道题,也是洛谷题单广场里面的 P3954,这道题目我们直接按照题目要求实现对应的计算式就可以了,题目如下👇。
2023-03-20 21:25:45
674
原创 洛谷 P1421 小玉买文具
接下来我们来看一下今天的第二道题目——洛谷题单广场里面的倒数第二题 P1421,这道题目和刚刚那道 P1425有着异曲同工之妙,它同样也需要我们对输进来的数据进行转化,这样才能方便我们的计算,话不多说上题目👇。
2023-03-20 21:05:35
552
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅