- 博客(132)
- 收藏
- 关注
原创 初阶10 模版进阶
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2025-03-27 23:51:48
855
原创 初阶9 stack和queue
stackstack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作。
2025-03-27 23:50:55
995
原创 初阶8 list
list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。与其他序列式容器相比,
2025-03-26 22:05:07
576
原创 初阶7 vector
vector就类似数据结构中的顺序表vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。
2025-03-26 22:03:35
764
原创 初阶6 string
C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。但是 size_t 是用无符号来修饰的,也就是说无符号的 -1,它的补码全是1,也就是整形的最大值,所以他的意思就是:从 pos 位置开始,往后取 42 亿多个字符。迭代器的作用是用来访问容器(用来保存元素的数据结构)中的元素,所以使用迭代器,我们就可以访问容器中里面的元素。
2025-03-25 18:46:38
792
原创 初阶4 模板初阶
本章重点如何实现一个通用的交换函数呢?以下面的交换函数为例:可以看到两种不同类型的交换函数的实现,我们用重载函数去实现的使用函数重载虽然可以实现,但是有一下几个不好的地方:泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础概念函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。格式注意:typename 是用来定义模板参数关键字,也可以使用 class(切记:不能使用 struct 代替 class)这里推荐使用class,
2025-03-24 15:49:56
640
原创 初阶3 C/C++内存管理
对于内置类型来说,malloc和new用法几乎一样,但是对于自定义类型来说,new和delete相比于malloc,会调用构造函数和析构函数这里以链表为列,看看malloc和new的区别malloc:单纯开空间//链表int val;//申请节点int main()// 定义n1节点free(n1);return 0;new:开空间+调用构造函数初始化//链表public://构造函数:_next(nullptr), _val(val) // 初始化列表。
2025-03-24 15:39:39
1352
原创 初阶2 类与对象
与结构体相似:class + 类名 + {} +;;——分号不可省在类里面定义函数需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。class Data//类里的内容由成员函数和成员变量组成public:_day = day;private:在类外定义函数——类域int _age;在类外定义函数,需要在类里面声明一下这个函数,并且要在定义的时候函数名前加上类名+作用域限定符,表明这是该类的函数。且我们常常将声明放在.h。
2025-01-27 22:45:26
1140
原创 初阶1 入门
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。一个命名空间定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中//局部域->全局域->展开(编译时是否去命名空间)了的命名空间域 or 指定访问命名空间域// 命名空间中可以定义变量/函数/类型int val;命名空间可以嵌套定义int a;int b;int c;int d;
2025-01-27 22:40:02
1117
1
原创 C++前言
PC平台几乎所有的游戏都是C++写的,比如:魔兽世界、传奇、CSgo、等,市面上相当多的游戏引擎都是基于C++开发的,比如:Cocos2d、虚幻4、DirectX等。关于全局问题可读《深入探索C++对象模型》、《Imperfect C++》、《C++沉思录》、《STL源码剖析》,要挑战智商,可看关于模版及模版元编程的书籍如《C++ Templates》、《C++设计新思维》、《C++模版元编程》;用java,但内卷化比较严重,大厂可能会有C++后台开发,主要做一些基础组件,中间件、缓存、分布式存储等。
2025-01-25 11:15:29
906
原创 初阶5 排序
任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。它是通过堆来进行选择数据。这个数组,最大是9005,但最小的数是9001,如果用长度为9005的数组,那么按照上面的方法排序,肯定会太过浪费。之前学习的排序,无论是希尔排序,还是堆排序,都用的是比较两个数大小的方式进行的排序。现假设有一组0~4的数据需要排序:{ 2,3,3,4,0,3,2,4,3 }
2025-01-22 23:16:11
940
原创 初阶4 二叉树
本章重点树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树的结构:树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法。表示:左孩子右兄弟表示法1.4树在实际中的运用(表示文件系统的目录树结构)一棵二叉树是结点的一
2025-01-19 16:50:36
1058
原创 句子读单词
每组数据首先输入1个正整数n(1≤n≤50),然后输入1行长度不超过80的英文文本(只含英文字母和空格)。注意:不要忘记在输入一行文本前吸收换行符。在一行中输入一个英文句子(不超过100个字符),输出这个句子中单词的个数,单词之间以空格分隔,除空格外都认为是单词(包括符号)。输入长度不超过80的英文文本,统计该文本中长度为n的单词总数(单词之间只有一个空格)。首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。对于每组测试数据,输出长度为n的单词总数。
2025-01-17 21:27:29
213
原创 专题07-7-8 六大门派身份识别
若验证失败,说明对方为假冒的,立即开战(当然,如果打不过就溜……例如,验证码000100015可以通过验证,因为10-15之间的素数有11、13,其各位数字之和为(1+1+1+3) = 6,6除以6的余数为0,与门派编号0相同。武林中六大门派“少林派、武当派、昆仑派、峨嵋派、华山派、崆峒派”的弟子众多,他们行走江湖,需要能够互相识别身份,以免被邪门歪道的恶人冒充。(提示: a、b均可以是0-9999的任何数);首位数字表示所在的门派编号,少林派、武当派、昆仑派、峨嵋派、华山派、崆峒派依次使用0-5表示。
2024-12-23 15:05:09
266
原创 专题07-7-7 检查密码
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。如果密码长度合法,但存在不合法字符,则输出Your password is tai luan le.;如果密码长度合法,但只有字母没有数字,则输出Your password needs shu zi.;如果密码长度合法,但只有数字没有字母,则输出Your password needs zi mu.。如果密码合法,输出Your password is wan mei.;
2024-12-23 15:04:26
285
原创 实验11-7-8 找鞍点
输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。
2024-12-21 12:21:16
166
1
原创 实验11-7-7 数组元素循环右移问题
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A。每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
2024-12-21 12:18:54
226
原创 专题07-7-4 字符串排序
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
2024-12-14 12:05:38
248
2
原创 专题07-7-3 找最大字符串
从键盘上输入4个字符串(每个字符串最多包含100个字符),求出其中的最大字符串并输出。从键盘上输入4个字符串(每个字符串最多包含100个字符)。输出最大字符串,最后换行。
2024-12-14 12:04:33
200
原创 专题06-7-4 6174问题
也就是说,对于任意一个各位数字不全相同的4位正整数n经过若干步骤计算,最终会是到6174,并陷入6174的轮回!这就是数学上著名的6174黑洞问题。所有的数字从小到大排列后得到整数b,然后把a-b做为新的4位整数n,然后重复以上变换操作,直到得到6174,对于任意一个各位数字不全相同的4位正整数n,对n进行以下变换:把n所有的数字从大到小排序后得到整数a,(以后进入黑洞,出不来)6174-6174=6174。(以后进入黑洞,出不来)6174-6174=6174。(第3次变换)8532-2358=6174、
2024-12-13 01:23:58
393
1
原创 专题06-7-2 哥德巴赫猜想
可以有很多这样的数字。对应于每个数字,程序应输出上述对的数量。请注意,我们只统计不同的数对,因此不应将(p1,p2)和(p2,p1)分别计为两对不同的对。然而,对于给定的偶数,可以找到这样的一对素数(如果有的话)。这里的问题是编写一个程序,打印出满足给定偶数的猜想条件的所有素数对数。在每个输入行中给出一个整数。你可以假定每个整数是偶数,并且大于或等于4且小于2的15次方。输入的结尾用数字0表示。对于任何大于或等于4的偶数n,存在至少一对素数p1和p2,使得n = p1 + p2。在这里给出相应的输出。
2024-12-13 01:22:49
266
原创 专题06-7-1 二分法求方程的近似根
请编程用二分法求出方程在区间[0,2]内的一个近似根。算法中的ε取值由输入得到。(3)如果|f(x)|< ε,则认为该点x就是方程的近似根(ε是一个极小值);(4)如果f(x)与f(a)同号,则把x赋值给a;−3在区间[0,2]内与x轴肯定有交点,即方程f(x)=0有根,(2)找到区间的中点x=(a+b)/2;(5)转向步骤(2)开始下一次迭代。(1)设定初始有根区间[a,b];一个近似根,保留8位小数。一个很小的实数,代表ε。已知函数 f(x)=x。
2024-12-12 01:07:39
613
1
原创 初阶2 顺序表
线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。最容易想到的,时间复杂度为O(N^2),空间复杂度:O(1)目标:在数组上完成数据的增删查改。
2024-12-12 00:12:40
1371
原创 专题05-7-3 简单的基数排序
注意,桶的二维数组的大小是要排序的整数数组大小的10倍。桶式排序(这里以对若干个正整数的排序为例描述求解过程):待排序的正整数存放在一维数组中,此外还有一个整型的二维数组,其中行下标从0~9,列下标从0~n – 1。例如,在对数组进行第2轮处理时,100安排在行0,3安排在行0(它仅有一个数位),而97安排在行9。在第3轮处理时,100安排在行1,3安排在行0,而97安排在行0(在3之后)。接下来依次取一维数组中所有数字的十位,百位,千位等等,并按取出的十位,百位,千位等位上的数字不断分桶和放回原数组;
2024-12-11 01:10:15
405
原创 专题05-7-1 数组元素的删除
完成数组元素的移动功能:假设数组有n个元素,输入一个数x,把数组的第x个位置的元素删除了,后面的元素依次前进一个位置。第一行包括一个整数n(1<=n<=100),表示数组元素的个数。第三行输入一个数k(1<=k<=100),表示要进行k次删除。输出经过k次删除后的数组,每两个元素之间用空格隔开。接下来k行,每行一个数x,表示要删除第x个元素。第二行输入n个数组元素,均为整数,用空格隔开。重复若干次这样的删除,得到最后的结果。
2024-12-11 01:09:40
212
原创 专题05-7-2 二分查找
测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个各不相同的待排序的整数,第三行是查询次数m(1≤m≤100),第四行输入m个待查找的整数。对于每组测试,分2行输出,第一行是排序后的升序的结果,每两个数据之间留一个空格;第二行是查找的结果,若找到则输出排序后元素的位置(从1开始,每两个数据之间留一个空格),否则输出0。对于输入的n个整数,先进行升序排序,然后进行二分查找。
2024-12-10 12:44:31
277
原创 埃拉托斯特尼筛法
埃拉托斯特尼筛法(Sieve of Eratosthenes):这是一种高效的找出一定范围内所有素数的方法,通过预先筛选出所有素数,可以避免对每个数都进行素数判断。在每个输入行中给出一个整数。你可以假定每个整数是偶数,并且大于或等于4且小于2的15次方。输入的结尾用数字0表示。每个输出行应该包含一个整数。输出中不应出现其他字符。“这是我和其他选手比谁过题过得更快的游戏”在这里给出相应的输出。在这里给出一组输入。
2024-12-10 12:42:39
718
原创 专题04-7-10 不变初心数
不变初心数是指这样一种特别的数,它分别乘 2、3、4、5、6、7、8、9 时,所得乘积各位数之和却不变。例如 18 就是这样的数:18 的 2 倍是 36,3+6=9;18 的 3 倍是 54,5+4=9;18 的 9 倍是 162,1+6+2=9。对于 18 而言,9 就是它的初心。本题要求你判断任一个给定的数是否有不变的初心。输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一个不超过 10。对每个给定的数字,如果它有不变的初心,就在一行中输出它的初心;
2024-12-09 00:34:47
226
原创 专题04-7-9 螺旋方阵
所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。输出N×N的螺旋方阵。每行N个数字,每个数字占3位。输入在一行中给出一个正整数N(<10)。
2024-12-09 00:34:15
837
1
原创 专题04-7-3 判断题
输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。按照输入的顺序输出每个学生的得分,每个分数占一行。
2024-12-08 11:09:53
249
原创 专题03-7-9 猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?输入在一行中给一个正整数N(≤1000)。在一行中输出当选猴王的编号。
2024-12-08 11:09:07
212
原创 专题03-7-7 选择法排序
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。本题要求将给定的n个整数从大到小排序后输出。
2024-12-07 09:48:19
199
1
原创 专题03-7-6 勇争前三
pta迎新赛开始了,因为前三名同学有奖,所以大家都想得到前三名。从键盘输入若干个学生成绩(不超过100个),输出每组排在前3高的成绩。一行,输入若干个学生成绩(整数表示,范围0~100),用空格分隔,以负数结尾(注意:结尾负数不是学生成绩)。一行,输出成绩最高的前3个,用空格分隔,结尾没有空格,若不足三人的话,用字符#补上。
2024-12-07 09:47:07
146
原创 专题03-7-5 输出冒泡排序过程
输入n(1≤n≤10)个整数,用冒泡排序法对其从小到大排序,共进行n-1趟,要求输出每一趟的排序情况。每个数后面有一个空格,每个序列占一行。先输入个数n,再输入n个整数。
2024-12-06 11:29:19
152
原创 专题02-7-5 打印菱形图案
输出由n行星号“*”组成的菱形,如样例所示。每个星号后跟一个空格。本题要求编写程序,打印一个高度为n的、由“*”组成的正菱形图案。输入在一行中给出一个正的奇数n。
2024-12-06 11:28:40
243
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人