自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (1)
  • 收藏
  • 关注

原创 迭代器和函数对象

c++STL的泛型算法,参数为什么接收的都是迭代器?泛型算法:模板写的,全局的,针对所有容器使用的,不管泛型算法实现什么功能操作,首先要获取或者遍历容器所有元素 因此泛型算法,必须找到一种统一的方式:用相同的方式可以遍历所有的容器,访问容器元素 operator[]只能访问数组类容器 所以使用容器迭代器的原因:用迭代器访问任何容器,其代码形式时一模一样的!!! 但是底层遍历不同容器,遍历方式是不同的,但这个差异都被封装在迭代器的运算符重载函数中泛型算法= 模板 + 迭代器 +

2020-11-26 15:35:25 206

原创 类模板

类模板的实现一般构造和析构函数后面不加类型参数,但是其他的成员都需要加上类型参数<T>下面是一个链表的类模板而且node和Clink都是模板的名称只有node<T>,Clink<T>才是类的名称类模板是不支持推演的,只能明确指定需要实例化的类型 template<typename T> class Clink { public: Clink(); ~Clink(); void inserthead(T val); void

2020-11-26 15:30:39 248

原创 函数模板

c++模板 template 函数模板和类模板模板的意义:可以把类型参数化bool compare(int a,int b)//参数化实参的值{ return a>b?a:b;}bool compare(double a,double b)//非模板函数,普通函数{ return a>b?a:b;}//类模板的类型参数可以给默认值,从右向左给//但是函数模板是不能给默认值的//template<> :定义模板的参数列表,模板类型参数可以用typena

2020-11-26 15:26:20 192

原创 new和delete

malloc :void* malloc(size_t size); 1.返回值类型不安全 2.开辟内存由使用者控制空间浪费或者不足free :void free(void*)int main(){ int *p=(int*)malloc(sizeof(int)); if(p==null) { exit(0); } free(p); int**p=(int**)malloc(sizeof(int*)*3);//C语言动态开辟二维数组 for(int i=0;i<3;i+

2020-11-26 15:19:06 131

原创 引用

引用:是一个别名,在底层以指针的形式来做支持,引用不参与类型int val=3;int &refval=val;引用必须被初始化,引用跟初始化时绑定关系类型 & 引用名称 = 被引用对象引用是要注意类型匹配,这点和指针的操作一样同理因为引用不是对象不占用空间,所以不存在引用的引用但是系统会自动开辟一个空间存放引用的指针信息所以应用在底层来看其实就是一个指针,在使用引用的地方系统会自动进行一个解引用的操作int a=10;int &b=a;int &c=

2020-11-26 15:10:57 93

原创 const成员和对象

class Foo{ void show()const{ cout<<"Sad"<end;}//const常方法}这样加了const的成员函数后,就会提示编译器,该成员函数不会对成员变量进行修改,而且也无法修改这个const修饰的是this指针,通过修改this指针的属性,进而修改函数功能************************************************************************************************

2020-11-26 14:51:21 103

原创 类中默认的函数

一个类在没手动添加函数的时候系统会默认添加一下几个函数1.构造函数2.析构函数3.拷贝构造函数4.赋值运算符重载函数5.取地址操作符的重载函数6.const修饰的取地址操作符的重载函数1构造析构: 成员变量的构造先于本身的构造,而析构的时候则相反 class React { public: React(Point a, Point b); ~React() {} private: Point a, b; }; 上面的类中,Point类的构造函数

2020-11-26 14:44:09 140

原创 this指针

为什么存在this指针? 同一个类型实例化的每一个对象都有自己私有的一份成员变量,但是他们共享同一套成员方法,方法经编译后存放 在代码段中。 但是当调用成员方法时,能够知道该调用谁的成员函数,是因为this指针的存在, 当对象调用如add()的成员函数时,把该对象的地址当做实参和操作的参数共同传入函数 所以便在编译器编译后,所有的成员函数中都会存在一个this指针的参数。 并且在所有成员访问前,前面都会添加this->指向1.类成员方法的调用约定 thiscall: 成员方法调用

2020-11-26 14:40:01 94

原创 static

静态变量:是属于整个类的,而不是属于一个对象的,可以在外部直接访问他是所有对象共享的,只开辟一个空间,不会复制多份,操作的同一个数,不会因为其处于private而受到影响静态成员变量在数据区上,而普通对象开辟内存在栈上int class::mcount; 这时在data段的BSS段自动初始化为0,必须在类外初始化定义初始化:int Object::val = 0;使用方式:cout<<Obect::val<<endl;//建议使用第一种,静态方法用类作用域调用Obj

2020-11-26 14:34:25 94

原创 const

1.c中的const:const int a=10;int *p=&a;*p=30;这时在C语言.c文件中中程序是没错的。在C语言中const修饰的变量叫常变量常变量的处理规则在编译阶段,只是查看常变量有没有做左值,其他的处理和变量相同所以只要不是const int a;a=10;就不会出错,但是可以通过指针进行间接修改2.c++中的const:const修饰的变量叫做常量,不允许修改,并且常量一定要初始化;所以上面的程序在c++中错误const int a=100;int ar

2020-11-26 14:29:50 176

原创 对象的生存周期

临时对象的生存周期在表达式结束class point{}如果有代码出现》point p=10;这个过程会出现:1右操作数10 生成临时对象:point(10)=》生成临时对象2临时对象生成p这个新对象3表达式结束,临时对象销毁但是实际上并不会出现这么多操作,会直接进行一个对p对象的构造函数只是因为存在临时对象优化优化的前提是:临时对象的生成是为了生成新对象 以临时对象的方式来生成新对象临时对象的分类: 1.显示生成临时对象:明确指出生成什么样的临时对象 poi

2020-11-25 21:42:39 126

原创 类和对象

用C语言模拟c++面向对象的操作typedef struct data{int a;int b;void(func)(struct DATA, int, int);//函数指针与函数名无关,只和返回值和参数类型有关}DATA;void setvalue( DATA* d, int aa, int bb){d->a = aa;d->b = bb;}int main(){DATA data;data.func = &setvalue;data.func(&am

2020-11-25 21:39:54 106

原创 友元

友元必须在类的内部声明,而且尽可能将友元的声明放在同一位置,且友元不受public或private的修饰的限制1.友元是单向的不是双向的。class Human{public: friend void show(Human* xp);//在外部可以调用这个函数 friend class People;//这时People类就可以调用Human类中的任何成员,包括私有成员privare: int num;};class People{public: void show(Human*

2020-11-25 21:32:31 190

原创 c和c++的相互调用

由于c和c++的函数符号生成的规则是不同的,符号解析(链接阶段)的时候是不同的所以不能直接调用可以在.cpp文件中加上extern “c”{int sum(int a,int b);//这样就声明是以c的规则进行函数声明}如果想在.c文件中使用.cpp文件的函数,那么在.cpp文件中需要把整个函数的定义都放在extern "c"中如果我们需要写一个.c文件需要调用.cpp文件中的函数,但是哪个.cpp文件不能进行修改,这时我们可以写一个.cpp的中间层文件,如:int sum(int a,

2020-11-25 21:27:56 120

原创 内联

inline函数在编译阶段处理在调用点直接代码展开,不会生成符号,由于是直接代码展开的方式所以在另一个文件中无发调用这个函数,因为不会生成同名符号,所以无法调用inline int sum(int a,int b){return a+b;}1.inline和宏有什么区别?首先是处理时间的区别,编译阶段处理是有类型检查和安全检查的而宏是在预编译阶段处理的没有类型检查和安全检查的,所以内敛是安全的所以在c++中inline是一种更安全的宏编译是以编译单元为单位的,所以inline函数是本

2020-11-25 21:24:37 801

原创 函数的默认参数和函数重载

一旦某个形参被赋予了默认值,那么他之后的形参都需要有默认值函数的实参和形参匹配是自左向右的,而函数的调用过程,实参的入栈顺序是自右向左的合理设计形参顺序,尽量让不使用默认值的参数放在前面例如:void foo(int x,int y,int z=10){}int main(){foo(1,2)//没有给z值,z会使用默认值//但是如果有一个重载的函数foo,它有两个参数,那么则会精确匹配使用重载的函数foo(1,2,10)}CComplex(int r=10,int m=10)//

2020-11-25 21:21:52 407

原创 右值引用

引用: 左值引用&和右值引用&&左值引用:有名字,有内存,生命周期不会马上结束int a=10;int &b=a;int &c=20;//错误,因为20没有地址,无法将20的地址放入引用c的寄存器中引用必须被初始化,引用跟初始化时绑定关系访问引用会自动进行解引用操作,在底层和指针的操作基本相同右值引用:临时量,没名字,没内存,生命周期马上到了==>右值int &&d=20;//产生一个 内存空间,把20放入 内存空间,再把 内存空

2020-11-25 21:16:04 140

原创 基本I-O

首先了解的是cout,cin是两个对象,分别是ostream类型和istream类型的对象mian.cpp编译器根据后缀名决定编译规则#include //IO属于c++库,而不是语言的一部分int main(){std::cout<<“hellow”<<std::endl;}// std::out 将数据送到标准输出,目前的标准输出对应的是显示器// std::endl 换行// 命名空间-std// 命名空间的主要目的是减少名称污染,例如两个空间内存在相同名字

2020-11-25 21:10:31 133

原创 new和深浅拷贝,禁止拷贝,强制堆空间创建对象

c++四种new:int *p=new int//throw bad_allocint *p=new nothrow int;//nullptr,#include //必须使用new头文件const int *p=new const int(20); //不可修改值int *p=new (buf) int(40);//定位newPoint *p1 = new Point();Point *p2 = new Point(1, 1);p1->show();p2->show();de

2020-11-25 21:07:33 230

原创 编译链接原理

1.预编译阶段预编译阶段主要处理那些源代码文件中的以“#”开头的预编译指令,并生成.i文件,.i文件属于文本文件 。处理的主要包括:删除#define并进行文本替换#if #endif #elseif递归展开#include删除注释 添加行号和文件标识保留#pragma2.编译阶段编译阶段将高级语言转成汇编代码并生成.s文件,.s文件属于文本文件。要处理的主要包括:词法分析:利用扫描器将原代码的字符序列分割成一系列记号(关键字、标识符、特殊符号等)并标记。将标识符放在符号表中,常量在

2020-08-17 14:10:26 203

原创 虚拟地址空间

任何编程语言产生两种东西:指令和代码下面实在x86体系,32位linux环境下的情况int a=1;int b=0;int c;static int a1=1;static int a2=0;static int a3;//上面的变量都叫数据在符号表中都会生成对应的符号,只有a和a1是位于.data段,而其余四个都位于.rodata段int main(){int aa=1;int bb=10;int cc;//而main函数中的变量并不会在符号表中产生符号,他们叫做指令,最终是

2020-08-17 13:21:52 107

原创 C语言—推箱子

这个小游戏设计起来不难,之所以做他的目的是,一天老师给我了个他很早以前写的2D库,让我去使用这个库完成一个小游戏,这个过程的意义再去让我一个以前从未用过别人手写库的学生,了解到了库的设计结构,和如果好的使用别人的库去完成任务,虽然编程难度不大,但是意义深刻,至少知道了以后遇见别人的库是怎么使用,而不会手忙脚乱。同时让我了解了游戏制作时的一些小方法如掩码的使用,和图像渲染的步骤,分层渲染的意义以...

2019-08-15 20:22:44 419

原创 c++——基于对象编程,日历

一个练习的小项目,由于正在学习c++,有很多函数和类还不会使用,所以这个日历是用我会的知识去完成的,所以会存在很多地方效率不高,希望看官谅解,这个日历主要的目的是让我体会什么是基于对象的程序设计方法,而改变过去C语言那样基于过程的设计方式,这时我写的第二版,第一版基本就是把C语言的函数,放在类中,然后调用方法,后咨询老师认识的设计的缺陷做了这么一版勉强过的去的日历当然还有一个明显的缺点就是我忘...

2019-08-15 20:02:48 1140

原创 C语言—贪吃蛇游戏

由于使用了一些库文件,上传了下载还需要积分,所以我会把所以代码都上传,方便日后复习结构设计的方向希望能有所作用,如果有什么缺点多谢点评首先是文件的划分需要注意的是,在函数命名的时候要注意清晰明了,还有就是注意模块的划分要清晰,该是哪个模块的任务就由哪个模块去做,不要混乱结果,打个比方,如蛇身的绘画,可以是snake模块的任务,但是在实际设计上,绘画并不是蛇本身的属性,他应该是view模块的...

2019-08-15 19:39:46 248

原创 C语言—打单词游戏

ps:页面最下面附上程序打包,也可在线浏览打单词游戏:本项目,主要目的是练习模块划分能力,我将整个程序划分为多个模块项目分析:显示要求:打单词下落方式显示多个单词通过正确输入消除单词对输入正确性统计能够随着熟练度改变速度有软件版权信息好看点,更有吸引力隐式要求:单词来源(外部文件或是字符串)原始单词存储问题(多个同类型元素,采用数组的方式,每个数组元素为字符串单词的地...

2019-06-19 20:44:21 1635 2

原创 C语言—打字母单机游戏(简易)

分析需求:制作一个打字母游戏,要求在屏幕中每隔一段时间,下落一定数目的字符,然后由键盘输入对应的字母后,能够达到消除该字符,并称产生新字符的功能。最好能够体现出难度提升的模式。需求分析:通过需求我们可以获得一下几点信息:显式信息:1.这是一个打字母游戏2.字母在显示过程中体现出下落功能3.从键盘输入字母4.正确输入可以消除字母并产生新字母5.能够体现难度升级隐式信息:1.字母...

2019-06-19 20:13:14 2552 6

原创 C语言—长句英语分割单词

首先解释设计基础通过状态划分来统计单词个数,这是为后面任务的完成做了铺垫通过三种状态来判断指针的位置,从而达到计算是否未正确单词,是否有非法符号存在等情况。如果按照正确情况是,指针就会通过正常的状态变化从而计算单词数目#define start 0#define in_word 1#define out_word 2#define pointerror 3//检测单词数目stru...

2019-06-19 19:55:54 3054

原创 小端存放粗解

小端存放首先小端存放只是内存存放的一种方式,同样的还有大端存放粗解:小端存放的意思是将高位数存放在高地址,低位数存放在低地址我们知道数据在内存中都是以ascii码的形式存放的,然后我们通过编译器(vs)观察内存时可以看到,他会以16进制数显示出来,以int型为例,刚好每两位数表示一个字节例如:int y=0x 12 34 56 78内存中:0x0012ff1c 780x0012ff...

2019-05-19 16:13:56 290

原创 scanf(),getch(),getchar(),gets(),printf()关于缓冲区的理解

这三个函数是常用的输入输出函数,而且他们都与键盘缓冲区密切相关。为了了解他们之间的关系,那么首先要知道他们各自的作用 scanf()函数 printf()函数 getch()函数getchar()函数C语言标准输入输出缓冲区标准输入stdin标准输出stdonscanf()函数控制字符就不一一谈论了。scanf()函数根据由format(格式)指定的格式从stdin(标准输入...

2019-05-11 18:37:42 743

原创 c语言二维数组

二维数组在内存中是由几个一维数组组成的下面这个例题中的三个数组就相当于int ar[3][4];举一个例题要求数组指针向下移动,在从数组里面向下移动,输出ar2中的第三个在这要说明的数组的地址和数组的首元素地址的值是一样的,但是意义不同在数组的地址前加*号就变为了数组的首元素地址如&amp;ar0是数组的地址,*&amp;ar就变为了数组首元素的地址int ar0[4]; int ...

2019-05-11 14:15:33 3356

原创 c语言二级指针

首先要知道指针都是四字节的下面举一个例子char a3, a2, a1, a0; char *p3, *p2, *p1, *p0; char **s; //假设 a3, a2, a1, a0和*p3, *p2, *p1, *p0存放的内存空间都是连续的,并且s指向p //求s+1 =4字节 //*s+1 =4字节 //**s+1 =其本身的数加一...

2019-05-08 19:07:59 373

原创 C语言作业—字符串转整型str_to_int()

#include<iostream>#include<stdio.h>#include<math.h>#include<string>#include<limits.h>#include <ctype.h>#include<stdlib.h>#include<assert.h>using...

2019-04-20 19:52:57 2824

原创 C语言—static静态关键字

static解释及使用首先static是一个关键字使用static初始化的变量存放于数据区对于局部变量void fun(){ static int x=0; static int x=val;}上面的程序是无法编译通过的,错误是变量重定义,因为静态变量只初始化一次。需要重点了解的是所谓的初始化并不仅仅指的是赋值,更重要的是为变量开辟空间。而对于静态变量来说,他的初始化只进行一次...

2019-04-20 17:43:27 274

原创 C语言循环语句和条件语句

循环大体分为三种1.while循环2. do while循环3.for循环首先解释while循环,先解释下while的结构while(x ){…}首先要知道循环的条件是真,在C语言中,真的表示是除0意外的所有值都代表为真比如bool型的true或者1,2,3,-1,-2,-3等。同时需要注意的是的while()中的x不仅仅代表一个数的值,它也可以是一个表达式比如while(tr...

2019-04-10 21:07:34 1318

原创 C语言—遍历查找并删除文件包括子文件

准备阶段在完成这个遍历删除任务之前,我们要先完成一下准备阶段的任务。最重要的就是**_**finddata_t结构体的使用和remove()以及rmdir()函数的使用。首先remove()函数是用来删除文件的头文件:#include <stdio.h>remove()函数用于删除指定的文件,其原型如下:int remove(char * filename);成功则返回0,失...

2019-04-03 21:35:55 1488

原创 C语言-浅谈程序内存空间的分区及变量与函数的堆栈空间分配,变量初始化未赋值情况

.cpp/.c (原文件)经过预编译 但是代码中以#开头的代码,都是在预编译完成的,而且不进行类型检查,只进行替换.i经过编译 进行类型和语法的检查.o/.obj经过链接.exe程序运行时分为4个区块来存放数据分别为.text 代码区.data 数据区.heap 堆区.stack 栈区我们在程序中使用的变量,函数都是需要内存空间的,这个时候栈区空间,为这些函数...

2019-03-27 20:39:45 715

原创 关系运算符

int a=10,b=20,c=0;c=a&&b;c=>在上的程序中得到的结果是1,是一个bool型的结果;它的运算规则是:0 0 =>0;0 1=>0;1 0=>0;1 1=>1它的规则是当第一个的值是0时,他就不判断第二个的值,因为通过第一个值就可以判断它为假了。所以同理| | 运算的方式和&&运算相反...

2019-03-23 19:28:14 176

原创 一个计算对应日期的天数的函数,以及清空缓存函数解决scanf使用出现错误

#include<stdio.h>#include <stdlib.h>int allmonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };int is_leapyear(int year){ if (year % 400 == 0 || (year % 4 == 0 && ...

2019-03-23 17:08:56 596

原创 sizeof 的一些解释

首先要明白的时 sizeof是一个关键字,而不是一个函数作为关键字,sizeof和int,double等关键字一样;所以作为关键字,int i=1;sizeof(int)=4;sizeof(i)=4;sizeof i=4上面的四个语句的答案都是四,这里sizeof i的答案是4,而它再使用时并没有加上();正好说明了它不是一个甘函数,而实一个关键字但是我们不能这么使用它,size...

2019-03-23 16:26:39 423

原创 bool型

首先bool类型只有一个字节在c c++ java中,真值有无数种,而假只有0所以bool a = -3;bool b = 20;bool c = 0;上面这三种情况的真值分别是 真 真 假所以只有当变量的值为0时才代表其为假int a = -3; int b = 20; int c = 0; c = a < b; printf("%d\n", c);这个...

2019-03-23 14:25:42 546

Desktop.rar

自制的C语言打单词游戏程序的源代码和模块划分,提供大家贡献使用

2019-06-19

空空如也

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

TA关注的人

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