
c++
Mysterious superstar
没有什么是不劳而获的
君子藏器于身,待时而动。不鸣则已,鸣则冲天
展开
-
滑动窗口详解
算法简介:滑动窗口,顾名思义,就是有一个大小可变的窗口,左右两端方向一致的向前滑动(右端固定,左端滑动;左端固定,右端滑动)。可以想象成队列,一端在push元素,另一端在pop元素,如下所示:假设有数组[a b c d e f g h]一个大小为3的滑动窗口在其上滑动,则有:[a b c] [b c d] [c d e] [d e f] [e f g] [f g h] 使用范围:字符串或者子数组的问题。 求满足某一条件原创 2020-06-22 21:11:03 · 1723 阅读 · 0 评论 -
C++基础知识全面总结
需要原图的老铁,留下邮箱。原创 2020-03-24 12:42:11 · 298 阅读 · 1 评论 -
输出为空,请检查一下你的代码有没有循环输入处理多个case
碰到了两次这种情况,并且在考试状态下,完全不给任何提示,并且说通过率为0,让人很蛋疼,在自己的IDE下任何例子都能通过。最后找到这道题,提示说是:输出为空,请检查一下你的代码有没有循环输入处理多个case 。查阅资料才发现是牛客要求你的代码能够一次调用之后处理完它给的所有案例。就是所谓的循环处理多个事件。https://www.nowcoder.com/practice/784efd40e...原创 2019-11-11 22:07:18 · 1339 阅读 · 0 评论 -
vs怎么在IDE里面查看虚表
输入的命令是/d1 reportAllClassLayout运行时在输出窗口会看到虚表,同Ctrl+f寻找你要找的类名就能直接看到原创 2019-11-04 23:46:26 · 791 阅读 · 0 评论 -
c++多态
目录3、抽象类3.1概念3.2、接口继承和实现继承4、多态的原理:虚函数表4.1、单继承4.3、动态绑定和静态绑定5、菱形继承菱形继承:3、抽象类3.1概念在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚...原创 2019-11-04 23:42:55 · 388 阅读 · 0 评论 -
C++中的多态(虚函数、协变、final、override)函数的重载、重写(覆盖)、隐藏(重定义)的区别
目录多态的概念:不同的对象完成同一行为时,展现出不同的形态。1、多态的定义及实现1.1、定义1.1.1、虚函数的定义1.1.2、虚函数的重写1.2、虚函数重写的两个例外1.2.1、协变1.2.2、析构函数的重写2.3、C++11中的final和override2.3.1、final:修饰虚函数表示该函数不再被继承2.3.2、override:检查派...原创 2019-11-04 11:01:20 · 1939 阅读 · 0 评论 -
类的继承
目录1、继承的概念和定义2、继承的关系和访问限定3、基类和派生类对象的赋值转化4、继承中的作用域(隐藏)5、派生类的默认成员函数6、继承与友元7、实现一个不能被继承的类8、继承与静态成员1、继承的概念和定义继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新...原创 2019-10-29 00:22:45 · 471 阅读 · 0 评论 -
解析加减法运算
/*#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;int main() { string s; cin >> s; int ans = 0; int len = s.length(...原创 2019-10-24 23:33:24 · 238 阅读 · 0 评论 -
c++当中的istringstream 和 ostringstream
在编码过程中经常与输入设备打交道,特别是进入c++阶段有了string类的帮助大大方便了字符串的处理。但是又遇到了新的问题,当cin遇到空格之后就会停止读取,但这往往不是我们期望的。并且有时我们需要借助空格分开一下字符串单独处理。 比如,我们需要做这样一件事,输入 3 6 7 11 将它存放进数组中,平是我们用的scanf("%s",&str)也是以空格来结束读...原创 2019-10-20 22:42:43 · 484 阅读 · 0 评论 -
【c++】引用、auto、和范围for循环、内联函数
一、引用1.1、引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引 用的变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体;1.2、举例说明1.2.1、引用变量int ming = 10; int &xiaoming = ming; cout << xiaom...原创 2019-08-28 15:33:06 · 314 阅读 · 0 评论 -
【c++】命名空间、函数重载、缺省参数
1、命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用 域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。1.1 命名空间的定义namespace n1{ int add(int a, int b) { cout <<...原创 2019-08-26 16:41:25 · 206 阅读 · 0 评论 -
【c++】两个跨文件的不同的命名空间里不同名的函数老是报 已经在 namespace.obj 中定义
main.cinclude <iostream>#include"test.h" using namespace std;//可以引用一个名字空间,使得这个名字空间里的所有内容对自己可见using namespace d1;namespace n1{ int add(int a, int b) { cout << "1\n"; retur...原创 2019-08-26 15:41:47 · 841 阅读 · 0 评论 -
【c】判断有头单链表是否有环,如果有环判断入环点的位置
判断是否为有环链表:以图片为例,假设环的长度为RR,当慢指针walkerwalker走到环入口时快指针runnerrunner的位置如图,且二者之间的距离为SS。在慢指针进入环后的tt时间内,快指针从距离环入口SS处走了2t2t个节点,相当于从环入口走了S+2tS+2t个节点。而此时慢指针从环入口走了t个节点。假设快慢指针一定可以相遇,那么有S+2t−t=nRS+2t−t=nR,即S...原创 2019-07-28 20:04:09 · 195 阅读 · 0 评论 -
【c】环形队列的初始化、入队、出队。
好几天没有更新博客了今天我们一起来看一下环形队列。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。队列有两种实现方式分别是链表实现和数组实现。接下来我们来看环形队列的实现方法。在程序设计上我们规定:环形队列最后一个...原创 2019-07-22 22:55:04 · 1861 阅读 · 0 评论 -
【c】在C语言中使用顺序表了实现一个通讯录,实现对联系人信息的增删改查(主要用到动态开辟内存,文件读写,结构体指针)
头文件#pragma onceenum menu{ EXIT, ADD, DEL, MODIFY, SEARCH, SORT, EMPTY, SHOW};#define NAME_SIZE 30#define SEX_SIZE 5#define ADDR_SIZE 100#define TEL_SIZE 20#define MAX 3typedef stru...原创 2019-06-27 10:07:16 · 1297 阅读 · 1 评论 -
【c】C语言中goto详细分析,和使用do{........}while(0)来代替goto语句的功能。
我们都知道goto语句经常被人所诟病,原因是:首先,由于goto语句可以灵活跳转会导致破坏结构化设计风格,若一段代码多次使用goto语句会降低代码的可读性。其次,goto语句的执行可能会跳过变量的初始化、重要的计算语句等,甚至影响到整个程序的运行。下面笔者介绍一种可以代替goto语句的方法。void SearchInfo(MailList* ml,char* find){ ...原创 2019-06-27 09:51:14 · 2743 阅读 · 0 评论 -
【c】在c语言中遍历有头单向链表,和删除一个有头单向链表当中的指定元素,翻转链表,详解。
首先讲思路,在单向链表当中,我们可以用遍历的方法找到指定元素的节点指针和上一个指向它的指针,首先我们来讲链表的遍历。typedef int SLTDataType;typedef struct SListNode{ SLTDataType _data; struct SListNode* _next;}SListNode;//链表节点,这是链表当中的单个块,包含了一个要存储的变量,...原创 2019-06-24 10:56:30 · 259 阅读 · 0 评论 -
【c】C语言运算符优先级存在的问题和如何检测内存泄漏。
C语言运算符优先级存在的问题 优先级问题 表达式 人们可能误以为的结果 实际结果 .的优先级高于* ->操作符用于消除这 个问题 *p.f p所指向的字段f (*p).f 对p取f的偏移,作为指针然后进行解引用操作。*(p.f) []高于* int *ap[] 指针数组...原创 2019-06-23 21:31:21 · 241 阅读 · 0 评论 -
【c】C语言中符号的重载
C语言中符号的重载 符号 意义 static 在函数内部,表示该变量的值在各个调用间一直保持延续性 在函数这一级,表示该函数只对本文件可见 extern 用于函数定义,表示全局可见 用于变量,表示它在其他地方定义 void 作为函数的返回值类型,表示不返回任何值 在指针声明中,表示通用的指针类型...原创 2019-06-23 20:26:00 · 527 阅读 · 0 评论 -
【c】c语言中有头单向链表详解、单链表初始化,删除整个链表、遍历整个链表、头插、头删、查找、尾插、尾删。
//main.c#include<stdio.h>#include<stdlib.h>#include <string.h>#include "slist.h"/*for(cur=head;cur;cur=cur->next){cur;}for(cur=head->next;cur!=head;cur=cur->next...原创 2019-06-22 23:34:38 · 544 阅读 · 0 评论 -
【c++】类当中的const成员
const成员一、const修饰类的成员函数const修饰类的成员函数称为const成员函数,实际上是修饰该成员函数的隐含this指针,表明在该成员函数当中不能对类的任何成员进行修改。说明一下什么是this指针,this指针是每个类的成员函数隐含的第一个参数,当一个对象调用这个成员函数...原创 2019-09-04 22:37:01 · 753 阅读 · 0 评论 -
【c++】类中的static成员
static成员声明为static的类成员称为类的静态成员,用static声明的成员称为静态成员变量,用static修饰的成员函数称为静态成员函数。静态成员函数一定要在类外进行初始化。在这里强调一点,static成员变量只能在类外进行初始化,因为c++规定:带有类内初始值设定的成员必须为常量。看一个...原创 2019-09-04 23:16:05 · 307 阅读 · 0 评论 -
函数指针和函数指针数组的用法和转移表、函数指针作为函数的返回值出现
函数指针:是指向函数的指针变量,本质上是一个指针变量,表示的是一个指针,它指向的是一个函数。我们用栗子给大家说明:(1)函数指针//函数指针//转移表int add(int a, int b){ return a + b;}int sub(int a, int b){ return a - b;}int mul(int a, int b){ return...原创 2019-05-14 23:12:35 · 586 阅读 · 0 评论 -
用两个队列实现栈&用两个栈实现队列
所谓栈:通常简单的栈使用线性表实现的,只是在push或者pop的时候要遵循它的“先入后出”的规则就是栈。所谓队列:通常简单的队列也是由线性表实现的,只是在push或者pop的时候要遵循它的“先入先出”的规则。如图所示:以下的实现中另一个队列或者栈都作为一个临时的对象来做暂时的保存数据,以便恢复被操作后的队列或栈。两个队列实现栈class queueStack{ q...原创 2019-10-10 12:46:37 · 166 阅读 · 0 评论 -
list源码实现(insert,list,push_back,push_front,pop_back,pop_front,erase,insert,iterator)
#pragma oncenamespace lxh{ template<class T> class ListNode { public: /* 链表节点 */ T m_val; ListNode * p_prev; ListNode * p_next; ListNode(const T & val=T()) :p_next(nullpt...原创 2019-10-03 21:35:56 · 610 阅读 · 0 评论 -
模拟实现vector类(完成四个构造,push_back,pop_back,insert,erase,resize,reserve,begin,end,capacity)
#pragma once#include <iostream>using namespace std;/* 手动实现vector *//* 9.27更新,知道分子,一无是处,千里之行,始于足下*/namespace work{ template<class T> class Vector { /* 模板类,容器就是顺序表*/ ...原创 2019-09-29 21:21:23 · 523 阅读 · 0 评论 -
模拟实现的string类,基本的构造、析构、增删改查
#pragma once/* 自己实现的string类 */#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;#define COUNTCAPA(size) (size / CAPACITY + 1)*CAPACITY/* 要开辟的空间大小 */...原创 2019-09-25 18:07:29 · 241 阅读 · 1 评论 -
高精度乘法
在这里没有过多的解释,最好的方式就是用几个例子去单步执行代码,毕竟这种算法不是随随便便就能想出来的。#include <stdio.h>#include <stdlib.h>#include <string.h>char s[10000], ss[10000];int a[10000], b[10000], c[10000];//int len...原创 2019-09-24 23:04:35 · 307 阅读 · 0 评论 -
vector容器insert()函数的三种使用方式
insert() iterator insert ( iterator position, const T& x ); void insert ( iterator position, size_type n, const T& x );template <...原创 2019-09-21 23:17:19 · 5852 阅读 · 0 评论 -
类和对象(下)拷贝构造函数、赋值运算符重载、const成员、构造函数体赋值和初始化列表、static成员、友元、内部类
目录8、拷贝构造函数8.1、特征8.2、浅拷贝构造无法解决类当中有堆空间的拷贝9、赋值运算符重载9.1、运算符重载9.2、赋值运算符重载10、const成员1、构造函数体赋值和初始化列表1.1、构造函数体赋值1.2初始化列表2、static成员3、友元3.1友元函数。3.2友元类4、内部类8、拷贝构造函数拷贝构造函数:只有单...原创 2019-09-15 20:16:36 · 473 阅读 · 0 评论 -
类和对象(上)、类和对象的初步认识、类的定义、类的定义、如何计算类对象的大小、this指针、类的6个默认成员函数、析构函数
类和对象不是一两句话就能说清楚的,笔者决定用上篇和下篇来总结给自己和朋友们。目录1、类和对象的初步认识2、类的定义3、类的定义3.1、访问限定符4、如何计算类对象的大小5、this指针5.1this指针的特性6、类的6个默认成员函数6.1、构造函数6.1.1、特性7、析构函数7.1、特性1、类和对象的初步认识类是抽象出很多相似的实体共同拥...原创 2019-09-14 22:46:31 · 445 阅读 · 0 评论 -
写一个麻将类
首先介绍一种麻将,麻将是从一万到九万、一饼到九饼、一条到九条、东风、南风、西风、北风、红中、白板、发财。以上牌面各四张组成。要想生成它们并且显示出来还有一定的数学规律的。0 1 2 万 饼 条 0 1 2 ...原创 2019-09-08 23:32:53 · 429 阅读 · 0 评论 -
设计一个日期类,包含以下功能: 1、只能通过传入年月日初始化。 2、可以加上一个数字n,返回一个该日期后推n天之后的日期。
设计思路很简单,就是日期一天天增加,在增加的过程中,严格遵守1 3 5 7 8 10 12 月大,2月闰年29天 平年28天的规则。#include <iostream>using namespace std;class date{public: bool judgeCF() { if (m_mouth == 4 || m_mouth == 6 || m_mou...原创 2019-09-06 21:11:25 · 636 阅读 · 0 评论 -
使用宏定义实现交换两个数值,使用宏定义实现求两个数的平均值,
宏定义实现交换两个数值 #include<stdio.h>#include<stdlib.h>#define W(a,b) a=a^b; b=a^b; a=a^b;//#define W(a,b) a=a+b; b=a-b; a=a-b;int main(){ *W(a,b); printf("a= %d,b= %d",a,b ); ...原创 2019-06-22 00:14:10 · 1809 阅读 · 0 评论 -
c语言字符串操作函数fgets()和fputs(),fgets()和fputs()
首先我们来看fgets()和fputs()char * fgets ( char * str, int num, FILE * stream );Get string from streamReads characters from stream and stores them as a C string into str until (num-1) characters have b...原创 2019-06-17 23:28:47 · 407 阅读 · 0 评论 -
【c++】c语言文件操作和fgetc和fputc函数。
首先我们来了解一下什么叫做文件在程序设计中,我们一般谈的文件有两种:程序文件、数据文件程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀 为.exe)。数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出 内容的文件。文件名 一个文件要有一个唯一...原创 2019-06-17 22:28:53 · 767 阅读 · 0 评论 -
【c++】一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个只出现一次的数字,编程实现。
首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我们想到了异或运算的性质:任何一个数字异或它自己都等于0。也就是说,如果我们从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现依次的数字,因为那些出现两次的数字全部在异或中抵消掉...原创 2019-05-16 18:56:30 · 876 阅读 · 1 评论 -
【c++】strtok()函数的使用和解析
strtokchar * strtok( char * str, const char * sep );sep参数是个字符串,定义了用作分隔符的字符集合 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。 strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会 改变被...原创 2019-05-24 23:08:47 · 1324 阅读 · 0 评论 -
【c++】判断目标字符串是不是另一个给定字符串左旋后的字符串
思路讲解:首先:根据上一篇博客左旋一个字符串的实现方法,我们只需要将给定字符串所有的左旋情况列举出来。然后:利用strcmp()函数将每个左旋后的字符串与目标字符串对比,如果相同就返回,所有的都不相同就跳出循环输出不相同。#include<stdio.h>#include<stdlib.h>#include<string>//用指针左旋字符串...原创 2019-05-16 12:42:06 · 217 阅读 · 0 评论 -
【c++】用指针的方式左旋一个字符串
上一篇博客写的是用数组的方式左旋一个字符串,接下来用指针的方式左旋一个字符串。思路还是一样,只是将数组的引用改成了指针的引用方式。#include<stdio.h>#include<stdlib.h>#include<string>//用指针左旋字符串int main(){ char str[] = "abcdefg"; char zuo...原创 2019-05-15 23:55:29 · 240 阅读 · 0 评论