自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++(12):String类型

一、普通String类型#include<assert.h>//string类型class String{ char* str; //new FILE *fp thread(要重写拷贝和赋值,防止出现浅拷贝和浅赋值) String(char* s, int) { str = s; }public: String(const char* s = nullptr) { if (s != nullptr) { int len = strlen(s) +

2021-01-12 21:34:17 220

原创 C++(11):包含和继承关系

一、包含关系当一个类构建的对象为另一个类的成员对象时:当一个类型包含另一个对象时,本类没有构造,析构,拷贝,赋值,但成员类有这些函数,本类就可以进行自己的合成因此来调动成员对象的函数。要和成员对象的行为保持一致。class Object{ int value;public: Object(int x = 0) :value(x) { cout << "构建" << this << endl; } ~Object() { cout <

2021-01-11 23:48:50 1600

原创 C++(9):智能指针

一、智能指针1.RALL:使用局部对象来管理资源的技术成为资源获取即初始化。 如何让资源自动销毁,即利用RALL,利用局部对象自动销毁的特性来控制资源生命周期。2.注意智能指针中.和->的区别3.智能指针的拷贝构造4.智能指针的拷贝函数5.unique_ptr 是一个独享所有权的智能指针,无拷贝构造和赋值函数。创建:unique_ptr<Test>(newTest(10))share_ptr资源可以被多个指针共享。...

2020-11-28 23:17:48 297

原创 C++(8):继承

一、1.当对象A是对象B的特例时,我们称对象A继承对象B。2.在参数列表构造类的成员属性,跟属性构建的顺序有关,若调动构造函数,按类中设计属性的顺序初始化。下图会先构建value,再构建num3.隐式转换:除了构建对象,初始化对象,构造函数第三个任务:类型转换。(但必须构造函数只有一个参数object(int x = 0)或者其他参数有默认值) 若加了explicit就消除了类型转换能力,只能显式转换,不能隐式转换。因此,①内置类型给自...

2020-11-22 17:23:56 185

原创 C++(7):vector源码②

一、vector源码1.交换函数(引用不仅可以引用变量,还可以引用指针,则交换函数也可以交换指针)template<class T>void Swap(T &a, T &b){ T c = a; a = b; b = c;}2.构造函数template <class _T> //无参的构造函数inline void construct(_T* p) { new (p) _T();}templ

2020-11-14 19:47:39 539

原创 C++(6):vector源码①

一、vector1.vector会分配一些额外的存储空间,以适应可能的增长,容量要大于元素个数。2.size_type max_size() const {} //返回可容纳的最大元素个数 size_type clear() {} //仅清除元素,未清除空间。 void shrink_to_fit() {} //当不清除数量clear()时,调用此函数缩小内存,shrink_to_...

2020-11-14 17:13:26 620

原创 C++(5):模板函数的重载 && 模板栈② && vector

一、模板函数的重载1.模板形参推演时,是重命名规则,不是替换规则。不能说形参名不同,就说是模板函数的重载。即以下就不是函数的重载。2.模板函数的特化二、模板栈template<class Type>class SeqStack{private: Type *data; size_t maxsize; int pos; public: SeqStack(int sz = 10):data(NULL),maxsize(sz),pos(-1) { da

2020-11-07 10:25:30 283

原创 C++(4):模板类① && STL

一、模板类1.普通对象调用普通方法;常对象调用常方法 常对象不能调用普通方法,普通对象可以调用常方法。例:以此种方式编写程序,使得通用性提高。即常对象和普通对象都可以调用常方法。如果类里的成员函数不改变成员状态,则将函数尽可能的设为常方法。...

2020-11-03 23:04:58 192

原创 C++(3):运算符重载 && 模板函数和模板类

一、运算符重载1.运算符的重载:实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该重载的运算符时调用此函数。这个函数叫做运算符重载函数,通常为类的成员函数。 定义运算符重载函数的一般格式: 返回值类型 类名::operator重载的运算符(参数表) {……} operator是关键字,它与重载的运算符一起构成函数名。Int Int ::...

2020-10-31 15:48:19 1584

原创 C++(2):构造函数和析构函数 && 引用 && 拷贝构造函数

一、构造函数和析构函数1.构造函数:数据成员多为私有的,要对它们进行初始化,必须用一个公有函数来进行。同时这个函数应该在且仅在定义对象时自动执行一次。构造函数是由系统调用的。2.构造函数的特点: ①构造函数绝大部分情况下是共有函数,极少部分会设置为私有或保护的。 ②函数名与类名相同 ③构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可写void。实际上构造函数有返回值,返回的就是构造函数所创建的对象。 ④在程序运行时,当新的对象被建立,该对象所属的类的...

2020-10-28 18:01:12 749

原创 C++(1):C和C++的区别 && 类与对象

一、C和C++的区别:1.输入、输出C:#include<stdio.h>int main(){ int a; char ch; scanf("%d%c",&a,&ch); printf("%d,%c",a,ch); return 0;}C++:#include<iostream>using namespace std;int main(){int a;char ch;cin>

2020-10-27 22:08:19 363

原创 Linux----编译链接原理

通过gcc编译程序,在执行程序的时候需要4个步骤:预处理、编译、汇编和链接1.预编译gcc -E 源文件 -o 要生成的目标文件名(**.i)(1)删除注释(2)宏替换(3)处理“#include”等预编译指令C语言的只有数据和函数名会生成符号.bss中存的是没有初始化的静态变量 和 初始化为0的变量。中间文件的ELF格式 :.o文件(.bss不在ELF文件中,.bss---->best save ...

2020-09-04 17:01:31 255

原创 Linux----gcc和g++的使用

gcc的使用:1.预编译gcc -E 源文件 -o 要生成的目标文件名(**.i)2.编译gcc -S **.i 默认生成一个**.s3.汇编gcc -c **.s 默认生成一个**.o,可重定位的二进制目标文件4.连接gcc **.o 默认生成一个a.out文件,可执行文件gcc **.o -o 指定可...

2020-08-27 21:19:50 185

原创 Linux----用户管理命令

1.用户信息存储的位置/etc/passwd /etc/group/etc/shadow 2.用户管理命令(仅在root用户下可以)添加用户命令:useradd newusername (添加一个新用户,并且创建一个同名的组)修改用户密码:passwd username修改用户信息:usermod删除用户:userdel username (仅删除系统中国保存的用户信息,没有删除用户的家目录) ...

2020-08-24 16:38:29 178

原创 Linux---- 进程管理命令

进程:进行中的程序或运行中的程序。进程是资源分配,任务管理的单位程序:一组计算机能够识别和执行的命令,windoes上程序是.exe ,Linux上a.out文件。操作指令+操作数据进程可看作程序的一次实例化1.执行一个程序,生成进程路径+可执行文件名 如: ./程序文件名 ---》前台执行,必须等待执行结束路径+可执行文件名 & 如: ./程序文件名 ---》后台执行2.查看 ps 当前终端运行的进程ps的选...

2020-08-21 18:23:07 160

原创 Linux----vim的使用 & 文件压缩与解压

文本编辑1.windows上的文本编辑器:NotePad++ / 记事本 ----> 源代码 (通过vs -- IDE集成开发环境)----> .exe Linux系统的开发:vi / vim ---->源代码(通过gcc g++) ----> a.out可执行文件2.vi和vim(命令几乎相同) vim不仅可以在终端运行,也可以运行于windows、 mac os、 windows。可以把vim当成vi来使用。 vi和vim都是Linux中的编辑器...

2020-08-20 18:17:32 685

原创 Linux----文件系统&文件操作命令

Linux的文件系统: EXT4(索引式文件系统),以EXT4文件系统格式化磁盘时,将磁盘分为superblock,inode,block三个区 inode:记录文件属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码; block:实际记录文件的内容,若文件太大时会占用多个 block ; super super block:记录文件系统的整体信息,包括inode/block 的总量、使用量、剩余量,以及文件系统的格式与相关信息等。...

2020-08-19 19:38:24 206

原创 Linux----目录结构介绍&&基础操作命令

Linux目录文件介绍Linux的磁盘文件介绍:没有盘符,所有目录都是从根目录开始存储的下面列出了linux下一些主要目录的功用。  /bin:二进制可执行命令,如:ls,mkdir等  /dev:设备特殊文件  /etc:系统管理和配置文件  /home:所有普通用户的家目录  /lib:标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件  /tmp:公用的临时文件存储点  /root:系统管理员的家目录  /mnt:系统提供这个目录是让用户临时挂载其他

2020-08-17 20:29:14 183

原创 数据结构:C语言实现----带头结点的单链表

带头结点的单链表特点:①头结点定义在栈区,不保存数据,起标记作用,不参与具体运算。②其他数据结点在堆区,动态申请内存/带头结点的单链表结构体声明typedef struct Node{ int data; struct Node *next;}Node, *LinkList;(1)初始化:头结点本身已存在,只需将头的next置为NULLvoid InitLinkList(LinkList plist){ assert(plist != NULL); if(plist == NU

2020-08-12 23:25:58 1148

原创 数据结构:C语言实现----顺序栈总结

栈可分为顺序栈和链栈,栈是一种先进后出的结构顺序栈:栈底--》存储数据的空间的首地址 elem 栈顶--》下标记录 top链栈:(头插,头删)栈顶--》头结点,无栈底 (尾插,尾删)栈底--》头结点,栈顶--》定义一个新指针指向最后一个结点顺序栈结构体及宏定义#define STACK_INIT_SIZE 5#define STACKINCREMENT 5typedef int ElemType;typedef struct...

2020-08-12 19:56:58 314

原创 数据结构:C语言实现----双向循环链表总结

双向:头的prior要指向链表最后一个循环:最后结点的next要只向头示意图如下:双向循环链表结构体声明typedef struct DCNode{ int data; struct DCNode *prior; struct DCNode *next;}DCNode, *DCLinklist;(1)初始化void InitLinklist(DCLinklist plist){ assert(plist != NULL); if(plist == NULL)

2020-08-12 19:29:27 487

原创 数据结构:C语言实现----带头双向链表总结

双向链表结构体声明typedef struct DNode{ int data; struct DNode *prior; struct DNode *next;} DNode, *DLinkList;(1)初始化void InitDulList(DLinkList plist){ assert(plist != NULL); if(plist == NULL) return; plist->prior=plist->next=NULL;}(2)静态

2020-08-12 18:53:39 245

原创 数据结构:C语言实现----不带头结点单链表总结

不带头结点的单链表结构体声明typedef struct Node{ int data; struct Node *next;}Node, *LinkList;(1)初始化void InitLinkList(LinkList *plist) //plist为二级指针,主函数传递第一个结点指针的地址{ assert(plist!=NULL); if(plist == NULL) return; *plist = NULL; }(2)求链表长度int Lis.

2020-08-11 21:27:16 733

原创 数据结构:C语言实现----顺序表总结

顺序表的实现顺序表结构体的定义typedef struct SqList { int *elem; //存放动态内存的地址 int length; //有效数据个数 int listsize; //总格子数 }SqList, *PSqList;具体实现如下:(1)初始化

2020-08-10 23:13:24 311

原创 位运算及其应用

1.位运算:①按位与:& (相同位都为1才为1)②按位或:| (相同位有1个1即为1)③按位异或:^(相同位不一样为1,同0异1)④按位取反:~(按位取反,1为0,0为1)⑤按位左移:<< (右边补0,相当于乘以2)⑥按位右移:>>(左边补符号位,无符号补0,有符号符号位为1补1,为0补0,相当于除以2,但注意,-1>>2,还是-1)2.位运算的应用步骤:确定符号确定数字构造数字规律:变1:|1变0:&0取反:^1

2020-06-14 21:17:46 187

原创 在不使用第三个变量的情况下,实现a,b两个数的交换

(1)法一:使用加法a += b; b = a - b; a = a-b;void Swap1(int *p1,int *p2) { *p1+=*p2; *p2=*p1-*p2; *p1=*p1-*p2; }(2)法二:使用减法a=a-b; b=a+b; a=b-a; void Swap2(int *p1,int *p2) { *p1=*p1-*p2; *p2=*p1+*p2; *p1=*p2-*p1; }(3)进行异或a =a^ b; b=a^ b;

2020-05-21 17:48:30 2112

原创 指针形式实现两个数交换

(1)第一个函数交换失败,主函数未向函数传递指针,仅仅是给a,b赋值,主函数的a,b与此函数的不是同一个。void Swap_err1(int a,int b){ int tmp = a; a = b; b = tmp;}(2)第二个函数交换失败,虽传递了指针,但未进行解引用,只是形参的指向进行了交换相当于进交换了钥匙。void Swap_err2(int *p1,int *p2){ int *tmp = p1; p1 = p2; p2 = tmp;}(3)第三个函数交换失败

2020-05-18 16:43:41 3757 2

原创 数字处理问题:给一个整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字

(1)统计为几位数若数字为0,则直接输出;若不为0,则设置计数器为1,数一位舍弃一位,计数器+1.int Count(long long n) //统计是几位数{ int t=0; if(n==0) t=1; while(n!=0) { t++; //计数器每次加一 n/=10; //舍弃最后一位 } return t;}(2)逆序输出各个数字...

2020-04-29 15:30:49 1952

空空如也

空空如也

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

TA关注的人

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