自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 Essential C++学习记录&笔记整理39(被参数化的类型,模板类(类模板)的定义,模板类型的参数处理)

终于tm的有时间看C++啦!断更了几天,终于开始向前探索了!到了第六章,加油,奥里给!目录前言被参数化的类型模板类的定义模板类型参数的处理前言Template(模板)能根据用户指定的特定值或特定类型,自动产生一个函数或类。被参数化的类型为什么要有模板呢,举一个类的例子:(假设已想好要定义BTnode类,用以存储结点数值,和左右孩子指针)class string_BTnode{public: //...private: string _val; int _cnt; string_B

2020-05-31 16:53:02 439

原创 锻练编程思维——每日一题:《剑指offer》字符流中第一个不重复的字符

题目描述题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。题目给出的代码框架:class Solution{public: //Insert one char from stringstream void Insert(char ch) {

2020-05-31 13:48:15 261

原创 锻练编程思维——每日一题:《剑指offer》表示数值的字符串

昨天光tm做实验了,写了一堆实验报告,今天上午也是。所以昨天没写oj题。没写就没写吧(那我不能穿越回昨天233),今天得写了,还是尽量一天一道,循序渐进目录题目描述题目分析题解代码小结题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。题目给的代码框架:class Solution {publi

2020-05-30 15:22:20 397

原创 锻练编程思维——每日一题:《剑指offer》数组中重复的数字

题目描述题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。很经典的一道题,但是想出一个很好的题解却很难。...

2020-05-28 17:31:38 235

原创 锻练编程思维——每日一题:《剑指offer》用两个栈实现队列

今天的每日一题还算简单,虽然我看了看题解。(因为我又想的有所偏差了/(ㄒoㄒ)/~~)私有成员给的居然是stack容器,有点懵,好在我摸索着用这个东西,还是能迅速上手的因为它本质就是个栈。目录题目分析题目分析题解代码题目分析题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。需要借助题目给出的代码进行分析class Solution{public: void push(int node) { } int

2020-05-27 13:50:44 239

原创 单片机应用技术的学习(DA转换器(PWM输出))

#include"reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedef unsigned int u16;typedef unsigned char u8;//对数据类型进行声明定义↑sbit PWM=P2^1;//定义输出PWM波形所用到的IO口sbit beep=P1^5;bit DIR;//bit和int char之类的差不多,只不过char=8位, bit="1位而已"。//都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。//这个

2020-05-27 12:02:02 1013 1

原创 锻练编程思维——每日一题:《剑指offer》跳台阶

目录题目描述题目解析所以用到的算法:递归。题解代码题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目解析思路:自上而下的倒推分析法(分治法)首先根据题目得知青蛙想要跳上n级台阶,他得先上1级或2级,然后3级或4级,当然这么想你屁也想不出来。n=1、2、…、5还好,要是n>5了,情况太多了,数跳法数一辈子吗?所以我们不如以自上而下来数跳法,这种方法在以后很多算法题至关重要,一定要具备这种分治法思维。具体是这样

2020-05-26 20:06:08 284

原创 EssentialC++第五章总结+课后习题+踩雷清单

目录总结习题5.15.2报错信息学习(新的一批,包括代码顺序位置问题)关于reverse_iterator(逆向迭代器)的学习关于奇怪的代码学习总结这章开始介绍了面向对象编程概念,最主要特质:继承和多态继承我们知道了父类和子类,即基类和派生类,这两个类之间的关系叫继承体系多态:动态绑定然后介绍了继承体系,LibMat类,Book类和AudioBook类的三层类继承体系介绍不带继承的多态(类之间的继承关系不大)如何定义抽象基类,三要素(三步法)如何定义派生类,很多要求定义完了抽象基类和派生类

2020-05-26 12:21:32 1495

原创 锻练编程思维——每日一题:《剑指offer》构建乘积数组

目录审题思路拆解:审题题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)提炼信息:①给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1]②B中的元素B[i]=A[0]*A[

2020-05-25 16:41:48 248

原创 数据结构与算法学习笔记(第五章 树与二叉树)(1)树

目录树定义:应用于计算机领域表示方式一堆术语孩子双亲祖先子孙兄弟堂兄弟根结点结点的度树的度结点的层树的深度分支结点叶子节点有序树、无序树森林树的结构注意!树定义:n个结点的有限集n=0,树是空树n>0有且仅有一个处于顶端的结点我们把它称作根结点其余结点分为m个互不相交的有限集T1,T2,T3…,TM每个集合本身又是一棵树,称为根结点的子树树的定义是递归的定义应用于计算机领域编译数据库系统算法分析表示方式倒树表示(最常见)

2020-05-24 12:08:11 245

原创 Essential C++学习记录&笔记整理38(运行时的鉴定机制)

这一节说了点新东西。目录运行时类型鉴定机制(RTTI)typeid运算符type_info类static_cast运算符dynamic_cast运算符运行时类型鉴定机制(RTTI)typeid运算符这是运行时类型鉴定机制得一部分,由程序语言支持。typeid运算符让我们得以查询多态化的类指针/引用,来获得类指针/引用所指对象的实际类型。用法举例:#include<typeinfo>inline const char* num_sequence::what_am_i()const

2020-05-23 20:51:23 410

原创 Essential C++学习记录&笔记整理37(在派生类中定义一个虚函数)

目录关于派生类和派生类提及虚函数的一些小细节虚函数的静态解析关于基类指针和引用的一些说明关于派生类和派生类提及虚函数的一些小细节在派生类中,如果其基类的同名成员函数已声明为虚函数(函数声明开头加了virtual),则派生类的同名成员函数声明/定义前不用加virtual也就是说,当我们在派生类中,为了覆盖基类的某个虚函数而进行同名函数的声明时,可以不加关键字virtual,编译器会根据两个同名函数的原型声明,自动决定派生类的某个同名函数是否会覆盖其基类中的同名函数定义派生类,要么覆盖基类的虚函数,要

2020-05-23 16:59:10 622

原创 随笔:体悟到的C++知识

关于引用和指针指针有弹性,灵活,让它指向哪个和指针同类型的对象都可以;引用(仅说明&)必须绑死在某个对象就想到这一个,其他的再说

2020-05-23 10:34:50 198

原创 Essential C++学习记录&笔记整理36(运用继承体系,基类应该多么抽象,初始化、析构、复制)

目录运用继承体系基类应该多么抽象每个派生类的共同操作应该再抽离出来给基类类定义里。指针和引用的复习初始化、析构、复制关于派生类对象的子对象派生类对象的子对象的各自构造函数调用机制派生类对象子对象的各自拷贝构造函数和拷贝赋值运算符调用机制运用继承体系这一节没什么要说的,有一点就是基类和其派生类构成一个两层的继承体系。基类应该多么抽象每个派生类的共同操作应该再抽离出来给基类类定义里。之前咱们设计的抽象基类提供的仅仅只有接口(一堆纯虚函数,和等被派生类继承的基类成员函数的声明/定义),并未有任何实

2020-05-22 17:53:56 270

原创 Essential C++学习记录&笔记整理35(定义一个派生类)

派生类说明:派生类由两部分构成:①基类构成的子对象(由基类的非静态数据成员(如果有)组成。②派生类的部分(派生类的非静态数据成员)组成。

2020-05-20 16:55:16 276

原创 Essential C++学习记录&笔记整理34(不带继承的多态,定义一个抽象基类)

一步步深入进面向对象编程风格去。目录不带继承的多态定义一个抽象基类定义抽象基类第一步定义抽象基类第二步定义抽象基类第三步纯虚函数其他说明完整抽象基类的定义不带继承的多态5.3节我看了三遍,也没看出他讲了什么东西,反正diss一遍自己写的代码。我矮子里拔将军,找出了这些知识点来给大家讲述。static_cast是一个特殊的转换记号,可将整型变量转换为对应的枚举型变量。(如可用于检验某整数是不是代表某一有效数列)用法举例:class num_sequence{public: //... st

2020-05-18 22:07:08 585 1

原创 Essential C++学习记录&笔记整理33(虚函数,protected,基类派生类构造函数析构函数调用关系)

这一节涉及到虚函数的知识。什么叫虚函数?默认情形下,成员函数的解析都是编译时静态进行。如果要让成员函数的解析在程序运行时动态进行,咋办啊?就在成员函数的声明前加上关键字virtual,举个例子:class LibMat{public: LibMat() { cout<<"LibMat::LibMat() default constructor!\m"; //LibMat类的默认构造构造函数 } virtual ~LibMat() { cout<<"L

2020-05-17 22:38:58 430

原创 Essential C++学习记录&笔记整理32(面向对象编程概念)

概述第五章主要讲的是面向对象编程风格,是C++基于对象的编程风格的一个进阶吧!应该是个精华部分!好好啃!好好学!面向对象编程概念class的主要用途是引入一个崭新的数据类型,能够更直接地在我们所设计的程序系统中表现我们想表现的实体。类间的关系需要“面向对象编程模型”加以设定。面向对象编程概念最主要特质:继承和多态继承概述继承是将一群相关的类组织起来,分享这些类之间的共通数据和操作行为继承机制定义着父子关系。父类(基类)定义着所有子类共通的共有接口和私有实现子类(派生类)可以增加/覆

2020-05-17 13:15:22 194

原创 数据结构与算法学习笔记(第四章 串、数组、广义表)(3)广义表

目录广义表性质广义表和线性表的区别:广义表优势和应用:广义表基本运算:广义表又称列表,是n>=0个元素a0,a1,…,an-1的有限序列,其中每一个ai是个原子或者广义表(套娃),举个例子:(注意空表也是广义表的元素)(0,1,…,n-1均为下标)广义表通常记作:LS=(a1,a2,…,an)(0,1,…,n-1均为下标) 其中LS是表名,n为表的长度,每一个ai为表的元素大写字母表示广义表,比如A、B广义表等,小写字母表示原子,比如c,d原子等表头:表尾:

2020-05-14 16:36:57 289

原创 数据结构与算法学习笔记(第四章 串、数组、广义表)(2)数组

目录数组维度:一维二维三维N维结论,特点定位某个元素顺序存储方式二维数组的顺序存储方式(行序为主序)矩阵特殊矩阵的压缩存储数组定义:按一定格式排列起来的具有相同类型的数据元素的集合维度:一维若线性表中的数据元素是非结构的简单元素就称该数组是一维数组逻辑结构是线性结构,定长线性表声明格式:数据类型 变量名称[长度];二维一维数组的数据元素又是一维数组,可以这么理解逻辑结构非线性结构:每个数据元素既在一个行表中(行一维数组),又在一个列表中(列一维数组)线性结构的定长

2020-05-14 16:30:10 448

原创 EssentialC++第四章总结+课后习题+踩雷清单

EssentialC++chap4(基于对象的编程风格)总结总结的目录EssentialC++chap4(基于对象的编程风格)总结类的介绍public公共接口private私有成员实现一个类,分文件式类主体外定义成员函数,需要类名::成员函数名(参数表){}析构函数和构造函数构造函数:用来初始化类里的私有成员析构函数:在类对象的生命周期结束后析构函数进行其资源(内存)的释放,需要手动定义mutable(可变)和const(不变)mutableconstthis指针静态类成员静态成员函数泛型指针类运算符重载

2020-05-13 02:38:58 1033 2

原创 Essential C++学习记录&笔记整理31(指针,指向类成员函数)

呜呼,终于到了最后一章!指向类成员函数的指针指向类成员函数的指针,总归是函数指针,有返回类型,有参表。只不过这个指针指向的函数是某个类里的成员函数。指向类成员函数的指针要标明它所指的是哪个类,如:void (num_sequence::*pm)(int)=0;这里pm这个指针就是指向的num_sequence这个类的成员函数。而且pm指针的初始值为0,表示他不指向任何成员函数。这个成员函数的返回值是void,参表只有单参,参数类型是int好你可能会问我有嘛用?就像函数指针一样,有嘛用?对

2020-05-11 17:29:59 262

原创 Essential C++学习记录&笔记整理30(重载iostream运算符)

这一节解决了我前面遇到的操作符重载的问题而不能显示类对象的数据,以及输出的显示顺序问题。好的让我们开始总结这一节所学为什么有要重载iostream运算符?因为我们想对某个类对象进行读写操作。不重载iostream类运算符直接cout<<类对象<<endl;或cin>>类对象;编译器会报错目录重载ostream运算符重载istream运算符报错信息,学习一下重载ostream运算符直接cout<<类对象<<endl;编译器会报错,所以

2020-05-11 12:16:27 805

原创 Essential C++学习记录&笔记整理29(实现一个function object)

所谓函数对象就是一种提供有函数调用运算符的类如果编译器遇到了一个函数调用,比如lt(ival);,那么lt这可能是个函数名或函数指针、也可能是个提供了函数调用运算符的的函数对象,如果lt是个类对象,那么编译器就会在内部将此语句转换为lt.operator(ival);函数调用运算符可以接受任意个参数。比如它可以支持矩阵(Matrix)这个类的多维度下标操作,而下标运算符只能接受一个参数。话不多说,咱们给一个代码示例!//LessThan.h文件#ifndef _LESSTHAN_H_#def.

2020-05-10 23:50:43 227 1

原创 Essential C++学习记录&笔记整理28(实现一个copy assignment operator)

还记得Essential C++学习记录&笔记整理22(什么是构造函数和析构函数)提到的默认的成员逐一复制操作?对于那个Matrix类,里面包含了一个指针成员(私有成员),然而这个类我们声明两个对象,然后一个对象给另一个对象赋值,采用默认的成员逐一复制操作的话(即前者=后者;),就会让两个类的指针成员都指向一个堆里的动态数组,要是这两个类对象的析构函数都作用的话,前者析构对象作用后,delete掉了这个堆里的动态数组,那么,后者的指针成员就成了个野指针,显然这种方法就不对。所以Matrix类需要

2020-05-10 22:35:04 152

原创 Essential C++学习记录&笔记整理27(友元函数,友元类)

这个标题我寻思我要不要这么写出来。最终还是写了,那我就围绕标题开始说话合作关系必须建立在友谊的基础上为什么会有friend?friend的建立,通常是为了效率考虑。类与类之间的或类与某非成员函数之间的简单的操作我们不需要friend比如数据成员的读写,我们可以给数据成员的读写这种操作提供具有public访问权限的inline函数(在某类的public:里写inline函数,这个inline函数是关于某类的数据成员的读写)。而类与类之间的或类与某非成员函数之间的复杂操作我们可以像inline函数那样直

2020-05-10 22:15:35 129

原创 Essential C++学习记录&笔记整理26(打造一个Iterator Class)

打造一个Iterator Class这一节讲了运算符重载的相关知识,以及嵌套类型(typedef)运算符重载泛型指针类的运算,肯定不能用正常的内置类型的那种运算符。为什么?这是规定!此时我就需要运算符重载,怎么运算符重载呢?运算符重载,说白了就是我重新定义原有的运算符以适合泛型指针类的运算。我可以像定义成员函数那样重新定义运算符。运算符函数很像普通函数,但是运算符函数不用指定函数名。只需要在运算符前加上关键字operator即可,如:class Triangular_iterator{

2020-05-09 21:14:26 573

原创 Essential C++学习记录&笔记整理25(静态类成员)

有些难度了。尽量搞清楚!静态类成员

2020-05-09 14:55:40 289

原创 Essential C++学习记录&笔记整理24(什么是this指针)

this指针,是一个能在成员函数里指向调用者(即类对象)的指针。我们需要一种可以指向整个类对象的指针,就是this指针。编译器自动将this指针加到每一个成员函数的参表。举个例子(rhs被绑定至tr2,也就是引用tr2的内存空间,就是一只质量忽略不计的绳子牵着tr2的内存空间)在成员函数内,this指针可以让我们访问this指针调用者(下面类主体外定义成员函数的例子,this指针调用者是tr...

2020-05-07 00:45:55 137

原创 数据结构与算法学习笔记(第四章 串、数组、广义表)(1)串

串目录串定义:零个或多个任意字符组成的有限序列组成:串值串名串长n术语子串主串字符位置子串位置空格串串相等例子:应用计算机上的非数值处理的对象大部分是字符串数据如文字编辑、符号处理、各种信息处理系统逻辑、存储结构逻辑结构存储结构算法(匹配算法)这里只介绍匹配算法,其他算法和顺序表链表的相关算法相同,只是数据类型不同,这里不再介绍目的:确定主串中所含子串(模式串)第一次出现的位置(定位)应用:搜索...

2020-05-06 23:39:23 447

原创 数据结构——KMP算法(难懂版,但还是看看吧)

据说这个算法很难,起初看了《大话数据结构》,知道了这个算法,但是没看懂没理解,然后看其他博客,尽管博客上写着易懂,好理解,但我仍然看不懂,不理解,心里一直在口吐芬芳。后来我看了几个版本的KMP算法讲解,终于有所明目,所以来给大家写一个易懂版 难懂版的,直接硬刚。因为是硬刚,所以字数难免长,我也没有动图,因为一开始就看动图我必看不懂动图,我相信有的人也是这样。但是我会尽量以唠嗑的形式跟大家讲讲我...

2020-05-06 23:35:49 1457 1

原创 Essential C++学习记录&笔记整理23(何谓mutable(可变)和const(不变))

何谓mutable(可变)和const(不变)const(不变)先给个代码例子说明一下:class Triangular{public://以下是const成员函数 int length() const{return _length;}//最好)和const中间加一个空格,不加也行。 int beg_pos() const{return _beg_pos;} int elem(...

2020-05-04 21:48:37 227

原创 Essential C++学习记录&笔记整理22(什么是构造函数和析构函数)

什么是构造函数和析构函数目录什么是构造函数和析构函数构造函数成员数初始化列表析构函数成员逐一初始化构造函数和析构函数是针对类来说的,别在别的地方用!构造函数为什么会有构造函数呢,就是我们想初始化类里的数据成员,我们就需要**提供一个或者多个特别的初始化函数。**嗯?为什么是特别的初始化函数,请先放下疑惑,看看这个特别的初始化函数的解释。每次定义类对象的时候,调用特别的初始化函数进行处理...

2020-05-04 19:28:41 453

原创 锻练编程思维——每日一题:《剑指offer》从尾到头打印链表

嗯,第一次上oj做算法题。第一眼就看到了从头到尾打印链表。然后苦思冥想,毕竟是C++实现,而非C实现,我看了一个题解,居然要用到STL相关的知识。好吧,我要自己讲清楚思路和代码class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<i...

2020-05-03 17:44:02 156

原创 Essential C++学习记录&笔记整理21(如何实现一个class)

这章第一节就,,,,比较生涩,慢慢接受吧。。。给代码解释一些东西,或许更清晰明了!如何实现一个class其实懂个框架就好,不要一口吃个胖子。一切都在注释里!练习4-1//stack.h文件#ifndef _STACK_H_#define _STACK_H_//头文件定义格式#include<string>//E:\STUDY\ConquerCPP\exercise4...

2020-05-02 17:12:45 197

原创 数据结构与算法学习笔记(第三章 栈与队列)(2)队列

队列目录队列常见应用顺序队表示上溢:队列满了,你还往队尾添加元素。那我让rear指针怎么在往上走呢?所以就要报错说上溢了下溢:队列空了,你还要从队头删除元素,那我让front指针怎么再往下走呢?所以就要报错说下溢了出队从队头(front指针指的元素)出队,入队从队尾入队(rear指针指的空间入队)所以就有了循环队列,就是我可以这样解决假上溢问题循环队列解决了假上溢问题,那么如何判断队空和队满?因...

2020-05-01 14:30:20 517

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除