![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
TaoWei_001
开始进入人生下一阶段,请做好准备!
展开
-
关于extern-头文件-结构体
今天在写FreeRTOS的时候,定义结构体变量时,总是提示我一个警告,让我很费解,因此决定研究一下。首先我在list.h中定义如下:struct xLIST_ITEM{ TickType_t xItemValue; /* 辅助值,用于帮助节点做顺序排列 */ struct xLIST_ITEM * pxNext; /* 指向链表下一个节点 */ struct xLIST_ITEM * pxPrevious; /* 指向链表前一个节点 */ void原创 2021-08-26 11:11:11 · 3142 阅读 · 2 评论 -
数据结构---链表(C语言实现)
前两天面试,被链表干懵了,所以决定好好总结一下。#include <iostream>#include <cstdio>#include <cstring>using namespace std;//定义链表中的复合数据域typedef struct Student { char name[20]; int num; int math;}student;/* 节点定义:声明了一个结构体类型 LinkList* 提示:由于指针域中的指针要指原创 2021-07-20 15:10:54 · 337 阅读 · 0 评论 -
C语言指针详解
说起指针,网上总是有很多的文章,各种由浅入深,再深的都有;且各种语言的视频讲解也有很多。本文并不是要说写的有多好,能让人一看就懂,这是不现实的;因为指针涉及了内存操作,如果不理解操作系统,不理解内存分配,讲的再多也如无根之莲,漂泊于水面。故本文只能算是一个借鉴和参考 ,顺便整理一下自己的思路,不至于每次看到指针,都要去百度搜索一遍。1.指针是什么?答:指针就是一个值为内存地址的变量。2.内存地址是什么?答:内存地址就是。。。。我们知道计算机有个内存条,有4G大小的,有8G大小,有16..原创 2021-07-20 13:16:45 · 495 阅读 · 1 评论 -
乐鑫2021笔试题(关于字符串赋值的一些问题)
在29号做了笔试,感觉自己还有很多东西要看。今天在复盘时,一道选择程序题引起了我的关注,特此写了一些内容作为分享,希望大家能够规避这样的错误。题目#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define ARRLEN 5char* getArr(void){ char arr[ARRLEN]; for (int i = 0; i原创 2021-07-01 19:40:01 · 200 阅读 · 0 评论 -
AcWing 790. 数的三次方根
实数二分,不需要考虑中点mid在那个区间,因此只考虑判断条件即可#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int main(){ double x; cin >> x; double l = -10000, r = 10000; while(r - l ...原创 2021-03-08 21:39:41 · 69 阅读 · 0 评论 -
AcWing 789. 数的范围
1.要分别找两个端点,即两个边界,进行两次二分2.注意两次二分的边界,以及中点计算口诀:左加1右不加1(L = M ; R = M)#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 100010;int n, m;int q[N];int main(){ ..原创 2021-03-07 22:22:40 · 296 阅读 · 0 评论 -
AcWing 1208. 翻硬币
仔细分析问题,发现其实就是一个递推的问题,按照顺序从左向右依次判断是否相等,不相等就改变两个状态相等就继续往下遍历,当遍历完之后,是一定有解的,所以不用使用bfs,因为它只有一个最优解#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 110;int n;char sta原创 2021-03-05 21:49:12 · 99 阅读 · 0 评论 -
AcWing 116. 飞行员兄弟
这道题和费解开关相似,但是又略有不同,主要是枚举方式不一样还有就是开关关闭的方式也不一样#include <cstring>#include <cstdio>#include <iostream>#include <algorithm>#include <vector>#define x first#define y secondusing namespace std;typedef pair<int, int&g原创 2021-03-05 21:05:36 · 170 阅读 · 0 评论 -
AcWing 95. 费解的开关
最重要的是理解第一行的枚举第一行共有5个格子,每个格子都有2种选择,按或者不按,所以共有32种方案对第一行的所有32种方案进行枚举操作重点是,第一行的枚举与第一行的数据无关,因为32种方案里包含了对第一行所有情况的操作因此(op >> i & 1) 判断的是当前是对第几种情况进行操作,step最多每轮也就能加满5次,所以不用担心超过6故对第一行的每一种情况进行判断操作之后,就可以对剩余行进行枚举了而剩余行则是根据上一行的状态所决定的,此时才是通过第一行开原创 2021-03-04 16:08:48 · 163 阅读 · 1 评论 -
AcWing 717. 简单斐波那契
转化为递归搜索树#include <cstdio>#include <cstring>#include <iostream>using namespace std;int f(int n){ if (n == 1) return 1; if (n == 2) return 2; return f(n - 1) + f(n - 2);}int main(){ int n; cin >> n;...原创 2021-03-04 11:21:05 · 112 阅读 · 1 评论 -
AcWing 1209. 带分数
第一次做,使用全排列1.先全排列1~92.再分别枚举a,b,c3.最后判断等式是否成立问题:耗时有点久#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 10;int n;int res;bool st[N];int path[N];/*function:求原创 2021-03-04 10:58:59 · 193 阅读 · 1 评论 -
AcWing 93. 递归实现组合型枚举
与排序型枚举相比,多传入了一个参数,为了保证枚举出来的顺序是从大到小的#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>using namespace std;const int N = 30;int n,m;int way[N];void dfs(int u, int start){原创 2021-03-03 20:57:47 · 142 阅读 · 1 评论 -
AcWing 94. 递归实现排列型枚举
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 10;int n;int state[N]; //0表示没放数, 1~n表示放了那个数bool used[N]; //true表示用过,false表示没用过void dfs(int u){ if (u .原创 2021-03-03 20:28:19 · 110 阅读 · 1 评论 -
AcWing 92. 递归实现指数型枚举
第一次做的时候,代码提交出问题,后面发现原因是因为边界判断有问题应该是u > n, 而不是u == n#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 16;int n;int st[N]; //状态,记录每个位置当前的状态;0表示还没考虑,1表示选它,2表示不选.原创 2021-03-03 20:15:06 · 186 阅读 · 1 评论 -
DFS解全排列问题(1)
DFS解全排列问题(1)写了好几版DFS,但是都被删了,实在是不知道从何下手。最后干脆回头一想,不要原理,从实际问题出发,从代码反推原理,终于跟着网页的讲解有了思路。这里先附上我参考的两个链接:假设问题:输入一个数,输出1~n的全排列首先考虑第一种排列方法,自然排列:for(int i=1;i<=n;i++){ a[step]=i;//step代表第几个数,i代表具体的数值}然后考虑,如果在某个位置上,某个数已经被用过,那么在后面的排列中,这个数不能再出现,这个位置上也不能存原创 2020-07-02 22:31:55 · 295 阅读 · 0 评论 -
C++--vector数组使用
参考别人链接:https://blog.csdn.net/u014453443/article/details/98057251主要是记住一维和二维数组的定义以及区别,它们初始化,和添加删除元素是有点不太一样的。一维数组vector<int> arr;arr.size();arr.begin();arr.insert();arr.push_back();arr.end();二维数组vector<vector<int>> A;//错误的定义转载 2021-01-05 11:40:21 · 1433 阅读 · 0 评论 -
C++ Primer Plus 15章 友元、异常
C++ Primer Plus 15章 友元、异常1.友元前面介绍过友元成员函数,这里再补充一下友元类。我们应该先明确一下,友元类的作用是干什么的,前面说继承的时候,继承分为公有继承,私有继承,保护继承。其中公有继承是is-a的关系,剩下两个是has-a的关系。但是总有些分类,它既不属于is-a,也不属于has-a。这个时候就要采用友元类的关系来表示它们。比如电视机和遥控器,他们既有共同的部分,又有相同的部分,我们不能用继承的方法去表示这两个物体,但可以使用友元类去表示它们,更为的合理。定义声明:原创 2020-07-14 16:42:35 · 140 阅读 · 0 评论 -
C++ Primer Plus 14章 代码重用
C++ Primer Plus 14章 代码重用主要内容:has-a 关系包含对象成员的类模板类valarray私有和保护继承多重继承虚基类创建类模板使用类模板模板的具体化接口与实现的关系 使用公有继承时,类可以继承接口,可能还有实现(基类的纯虚函数提供接口,但不提供实现)。获得接口是is-a关系的组成部分。 使用组合时(包含对象成员的类),类可以获得实现,但不能获得接口。不继承接口是has-a关系的组成部分。1.包含对象成员的类假设有两个类,B 和A,且 B has原创 2020-07-11 10:05:42 · 188 阅读 · 0 评论 -
C++ Primer Plus 13章 类继承(3)
C++ Primer Plus 13章 (3)前面两个部分是对于继承的派生类应该做些什么,以及派生类和基类的关系做了描述。下面是对于继承的最后一部分描述。访问控制:Protected我们知道继承分为3类,但是常用的都是public继承,里面一般包含来private成员和public成员,下面介绍protected成员,它和private相似,但是在派生类时有区别,如下:(1)使用派生类的成员可以直接访问基类的保护成员,但不能直接访问基类的私有成员。(2)对外部程序来说,保护成员的行为与私有成员相原创 2020-07-06 10:16:26 · 174 阅读 · 0 评论 -
C++ Primer Plus 13章 类继承(2)
C++ Primer Plus 13章 类继承(2)1.静态联编和动态联编将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编。而在编译过程中,编译器通过查看函数参数以及函数名确定使用哪个函数的过程称为静态联编。在类的继承中,由于虚函数的存在,使得在编译器必须生成能够在哎程序运行时选择正确的虚方法的代码,这被称为动态联编。C++中总是默认使用静态联编,这是因为静态联编的效率远高于动态联编,尤其是程序中不存在虚函数时。虚函数工作原理先给出一段包含虚函数的基类和派生类class Sci原创 2020-07-04 10:19:40 · 136 阅读 · 0 评论 -
C++ Primer Plus 13章 类继承(1)
C++ Primer Plus 13章 类继承(1)从已有的类中派生出新的类,而新的类继承了原有类的特征,包括方法。继承分为三种:公有继承,私有继承,保护继承这里暂时只介绍公有继承:public看一个书上的实际例子:给一个基类class TableTennisPlayer{private: string firstname; string lastname; bool hasTable;public: TableTennisPlayer(const strin原创 2020-07-03 10:54:14 · 138 阅读 · 1 评论 -
# C++ Primer Plus 12章(二)
C++ Primer Plus 12章(二)前面对于复制构造函数和赋值运算符进行了简单介绍,下面在此基础上简单的扩展一下。1.C++空指针的关键字:nullptr在原来的C风格之中,是使用NULL来表示空指针,以此来区分0和空指针的区别,使用’\0’来区分空字符和0的区别。现在的c++则使用nullptr去表示这是一个空指针。2.静态类成员函数和重载赋值运算符在类的设计中中,无论是成员还是成员函数,如果想要成为静态的,则必须加关键字static 进行声明,然后在方法中进行定义时,不能加stati原创 2020-07-01 10:59:44 · 141 阅读 · 0 评论 -
C++ Primer Plus 12章(一)
C++ Primer Plus 12章(一)早上阅读了一个小时,思考了良久,还是决定开始写下一些见解来记录自己所得。同时也给别人一些借鉴,也能得到反馈。之前的11章,我会慢慢的补充上去。在讲内容之前,我想先谈论一下这本书。从我真正静下心来每天花一个小时以上的时间去阅读后,才逐渐明白书里讲的内容。关于这本C++的书,有些章节写的极好,但有些章节我觉得还差了一点详细的东西,可能不太适合初学者,至少对C++和C有了一定了解之后,看这本书是很好的。下面,进入正题:(1)类中的成员使用指针和new进行动态内原创 2020-06-30 10:06:16 · 177 阅读 · 0 评论