- 博客(44)
- 收藏
- 关注
原创 C++的构造函数为什么要有初始化列表?它和在函数体内初始化有什么区别?
一、什么是初始化列表?以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。class Date{public: Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) {}private: int _year; int _month; int _day;};...
2022-03-27 13:09:43
2693
原创 理解C++中类的六个默认成员函数
所谓默认成员函数就是指,对于一个类,如果我们不主动去写这些函数,那么编译器会默认帮我们生成。六个默认成员函数如下:构造函数 析构函数 拷贝构造函数 赋值操作符重载 取地址操作符重载 const修饰的取地址操作符重载一、构造函数构造函数是一个特殊的成员函数,构造函数的名字与类名相同,创建类类型对象时,编译器会自动调用,保证每个数据成员都有一个初值,并且在该对象的生命周期只调用一次。构造函数虽然名为构造,...
2022-03-19 10:52:40
489
1
原创 C++——auto的使用细则
一、auto是什么?c++11中auto被赋予了全新的含义,通俗的将就是自动获取变量类型,它能自动检测赋值变量的类型。二、auto的使用细则1.auto与指针和引用结合起来使用用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&int x = 10; auto a = &x; auto* b = &x; auto& c = x;2.在同一行定义多个变量当在同一...
2022-01-20 11:38:04
1075
原创 vector先插入再删除导致的迭代器失效问题
//插入30 vector<int>::iterator pos = find(v.begin(), v.end(), 3); if (pos != v.end()) { v.insert(pos, 30); } Print_vector(v); //我自己写的打印函数 //删除3 v.erase(pos); Print_vector(v);看一下上面这个代码,先通过find()函数找到3的位置,将位置对应的迭代器保存在迭代器类型变量pos中,然后在pos位置插.
2021-12-27 15:25:56
694
原创 关于引用的介绍和使用
什么是引用? 通俗来讲,引用就是起别名,如下面所示,给变量a起了个小名叫做 b, a和b都是这个变量所对应空间的名字,当修改任何一个时,另一个也会被修改。int a = 10;int & b = a; 引用和指针要进行区分,指针是需要开辟空间的,指针开辟的空间是为了存放一个变量对应的地址,而引用不需要开辟额外的空间,它只是这个变量的”小名“,这个变量还是放在原本的地方,起一个别名但是并不需要存放东西。 看下面这段代码,可以看到 b是a的引...
2021-12-03 13:41:23
686
原创 为什么C语言不支持重载而C++支持?
想要了解该问题的原因,我们就要先了解一下C语言和C++编译链接的过程。 编译链接过程:总共有四步:预处理、编译、汇编、链接①预处理:进行头文件展开、宏替换、去注释、条件编译等过程,将我们写的 .h文件、.cpp文件生成 .i文件。 ②编译:检查语法,生成汇编代码,生成 .s文件。 ③汇编:把汇编代码转变为二进制机器码,生成 .o文件。 ④链接:把汇编代...
2021-12-03 09:30:36
882
1
原创 数据结构排序算法的C语言实现
数据结构的基本排序算法主要有:直接插入排序、希尔排序、简单选择排序、堆排序、冒泡排序、快速排序、归并排序。直接插入排序: 直接插入排序的思想比较简单,就是将排序数列分为两部分,前段数列是有序的,每次取后段数列中的第一个数,插到前段序列的合理位置,使得前段数列仍然保持有序。void PrintArray(int* a, int n) //实现打印数组{ for (int i = 0; i < n; i++) { printf("%d ", a[...
2021-11-30 10:54:18
1046
1
原创 栈顶指针和队尾指针指向当前位置和指向下一个位置的区别?——轻松搞懂栈和队列指针的指向问题
我们先看一下队列的队尾指针指向队尾元素的当前位置的入队操作: 可以看到,当队尾指针指向的是队尾元素时,我想加入一个新的元素,这时直接放在队尾指向的位置是不可以的,因为这个位置已经有元素了,所以先要对队尾指针进行移动,移动到一个空位置,然后再进行插入操作。 再看一下队尾指针指向队尾元素的下一个位置: 可以看到,让队尾指向的是下一个位置,那队尾指向的位置是空的,当我想插入元素时,是不是直接可以放到这个空位置上,然后再移动队尾...
2021-11-07 11:03:50
4417
原创 C语言实现栈和队列的基本操作
栈:1.栈的概念及其结构 栈是一种操作受限的线性表,只允许在一端进行插入或者删除操作。进行插入或产出操作的一端叫做栈顶,另一端称为栈底。 由于栈的操作受到限制,因此栈只有对栈顶的插入和删除两种操作,这就像对一个瓶子灌水和倒水一样,先灌入的水就在瓶底,后灌入的水就在瓶颈,在倒水时,后灌入的水就会先倒出来。 这就是栈的最根本的特点——“后进先出”。2.栈的C语言代码实现typedef int DataType;typedef struc...
2021-11-07 10:20:56
1276
2
原创 搞懂408数据结构中的结构体的定义
对于一些跨考408的同学来说,是不是经常会出现看见一些结构体的定义却不懂是什么意思,或者让你定义一个节点类型时,不懂各个部分的具体含义。希望这篇文章能够让你搞懂结构体到底是什么,各个部分是什么含义。 我们以一个单链表的结点为例: 对于这个单链表的结点类型,他一共包含两个东西,数据域和指针域,那这个数据域和指针域就是结构体的成员变量。下面是对这个结点的数据结构的定义,以及各个部分含义的解释。图中对typedef 和 stru...
2021-09-27 10:38:25
2125
1
原创 结构体的介绍
结构体可以认为是一些变量的集合,这些变量可以是不同的数据类型 对于一个学生信息,它可以包含:姓名、性别、年龄等信息,那么就可以将一个学生的所有信息都定义到一个结构体类型中。struct StuInfo{ char name[20]; char sex[5]; int age; }; 上面就定义了一个学生信息结构体,其中StuInfo是这个结构体类型的名称,最后面的分号也不能省略。 当然,有些结构在定义时并...
2021-09-27 10:00:51
190
原创 常用字符串操作函数介绍和实现方法
一、求字符串长度——strlensize_t strlen ( const char * str );字符串已经使用"\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')。注意函数的返回值为size_t,size_t表示无符号整形size_t my_strlen(const char* str){ int count = 0; while (*str++) { count++; } return...
2021-09-26 12:04:46
100
原创 大端存储与小端存储
我们都知道一个 int型数据 占用四个字节,不妨赋值int型变量a 为0x11 22 33 44,其中每两个数占用一个字节。 int a = 0x 11 22 33 44 数据在内存中是从低地址向高地址依次存储的。 如果按照字节从左到右即从高到低,先将高位字节的11存放在内存的低地址部分,再按顺序将22, 33, 44存入内存,这种存储方式就称为大端存储。a在内存中的形式如图所示:如果先存a的低位字节的...
2021-08-14 12:31:01
3110
原创 码元携带多少比特信息?波特率和比特率的关系?
在计算机网络的学习中,可能会对码元、码元传输速率、信息传输速率、波特率、比特率,他们之间到底是什么关系有些疑惑,今天我就在这里分享一下我的理解。首先说一下什么是码元按照定义来说,码元就是一个固定时长的波形信号,用这个波形信号来表示一个k进制数字,最常见的就是二进制码元,如下图所示,这就是一个码元,这个码元有两种形式,高代表1、低代表0,他就表示了一个二进制数。如何判断码元携带多少比特信息?码元携带多少比特信息,与码元的进制有关。...
2021-08-12 22:15:38
9636
原创 C语言函数栈帧的创建过程
以如下代码为例:int Add(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 10; int b = 20; int c = 0; c = Add(a, b); printf("%d", c); return 0;}每一个函数在调用时,都要现在栈区开辟空间,当main函数开始运行时,也会现在栈区开辟空间,开辟的空间就称为main函数的函数栈帧。 寄...
2021-08-12 14:14:02
116
原创 C语言获取带空格的字符串输入
在C语言中当我们想要输入一个字符串时,通常是采用 scanf("%s",str) 的形式获取输入的字符串。 但是在当输入的字符串中有空格时,就会停止输入,这是因为 scanf("%s") 会以回车和空格作为结束标志,因此可以采用如下两种来输入带有空格的字符串。1.使用gets()函数 gets()函数可以获取输入的一行字符串,并以回车符号结束。2.使用scanf("%[^'\n']",str); 在这里约束了结束条件,^ 代...
2021-08-08 17:07:45
6467
1
原创 C语言——数组和地址
int arr[10];定义了一个数组arrarr——(数组名)代表首元素地址&arr[0]——也代表首元素地址&arr——代表数组的地址上述三个变量的值是相同的,但是第三个和前两个的含义不同。int main(){ int arr[10]; printf("%p\n", arr); printf("%p\n", &arr[0]); printf("%p\n", &arr); return 0;}含义的不同可以通过...
2021-08-03 22:55:23
4794
2
原创 C语言小游戏——三子棋
效果图如下:设计思路:1.设计菜单界面 菜单界面应该包含两个选项:1.Play和0.Exit. 通过获取用户的输入的数字来决定游戏是否进行下去.2.棋盘初始化 棋盘是3×3的规格,因此需要建一个对应规格的二维数组。 初始化的过程就是将数组的每个元素都为空格。char board[ROW][COL]; //棋盘数组3.void InitBoard(char board[ROW][COL], int row, i...
2021-07-30 12:30:48
46
原创 C语言中函数返回的字符数组为null——函数中的局部字符数组
今天在刷题时,碰到这样一个问题,我定义的函数要求返回的是字符串,我在函数中定义了一个字符数组来表示,但是运行时发现函数的返回值为空。解决方法:方法1:将字符数组定义为全局变量方法2:通过malloc申请...
2021-07-17 23:03:41
980
1
原创 字符串转换整数 (atoi)
题目描述:请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(...
2021-07-16 22:20:00
103
原创 寻找两个正序数组的中位数
题目描述:给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。解题思路:先将两个数组进行合并,在通过下标得到中位数.double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){ //int num[nums1Size+nums2Size] = {0}; int *num=(int*)malloc...
2021-07-15 22:25:04
46
原创 无重复字符的最长子串
题目描述:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 ...
2021-07-15 22:21:58
55
原创 爬楼梯问题
问题描述:假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?递归方法:该方法就是斐波那契数列问题,n阶爬楼梯的方式就是爬n-1阶楼梯的方式+爬n-2阶楼梯的方式当楼梯阶数为1时,只有一种方法;当阶数为2时,有两种方法。所以递归的结束条件就是n=1或者n=2int climbStairs(int n){ int method=0; if(n<=0){ return 0; ..
2021-07-12 11:17:19
132
原创 判断是否为素数
思路:先判断是否为2,如果为2就直接输出素数如果不为2,记该数为i, 对从2-根号i之间的数进行取模运算,如果存在一个数取模后为0,那么该数就不是素数下面是C语言代码演示:#include<stdio.h>#include<math.h>int main(){ int num; printf("请输入一个数:"); scanf("%d",&num); if(num == 2) { printf("2是素数"); return 0;
2021-07-06 09:56:53
110
原创 如何判断闰年
规则:能被4整除且不能被100整除,或者能被400整除。通过使用该规则就可以对年份进行判断下面输出1000-2000中的闰年#include<stdio.h>int main(){ for(int i =1000; i < 2001; i++) { if(i % 4 == 0&& i % 100 != 0 || i % 400 == 0) printf("%d ",i); } return 0;}...
2021-07-06 09:45:56
73
原创 C语言求最大公约数
对于任意给定的两个数,输出最大公约数思路: 对于两个数,如果有公约数,那么最大的应该就是较小那个数本身,因此可以从较小的那个数开始逐渐递减并判断此时的数是不是公约数,如果是则为最大公约数结束循环。#include<stdio.h>int main(){ int max = 0; int min = 0; printf("请输入两个数:"); scanf("%d %d",&max,&min); int temp; if(max<mi...
2021-07-06 09:42:13
630
原创 力扣第66题—— 加一
题目描述:学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客 3 篇3、 学习的 vlog 视频 1 个...
2021-06-19 00:00:07
96
原创 力扣第53题——最大子序和
ti'mu'miao'shu:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2
2021-06-16 23:56:08
134
3
原创 力扣第35题——搜索插入位置
学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识题目描述:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客
2021-06-16 23:48:12
154
原创 力扣第28题——实现 strStr()
学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客
2021-06-15 20:16:16
104
原创 力扣第27题——移除元素
学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门s'd知识题目描述:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技
2021-06-15 20:12:34
93
原创 力扣第21题——合并两个有序链表
学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客
2021-06-14 23:54:51
93
2
原创 力扣第20题——有效的括号
学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客
2021-06-13 23:23:17
176
原创 力扣第26题——删除有序数组中的重复项
题目描述:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客
2021-06-13 20:55:43
242
原创 力扣第14题——最长公共前缀
学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客
2021-06-11 23:11:51
101
原创 力扣第9题——回文数
学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客
2021-06-10 22:07:07
98
原创 力扣第13题——罗马数字转整数
题目miao's:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN
2021-06-10 21:59:43
215
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人