自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 标准C++07

一、什么是模板模板是C++中自动生成代码的技术。二、为什么使用模板问题:实现一个通用的排序算法。C语言:通过回调函数实现,使用者调用麻烦。C++语言:函数重载,需要为多种类型实现一个第一版本,还会导致代码段增加。C/C++语言:借助宏函数实现,类型检查不严格,频繁使用还会增加代码段。由于以上原因C++之父在C++中实现了模板技术,既能技术多种类也能兼顾严格的类型检查,能让程序员编程专注思考业务逻辑而不用关系数据类型。三、函数模板1、函数模板的定义template <typename

2020-10-07 10:16:56 178

原创 标准C++06

一、虚析构当使用delete释放一个父类指针时(父类引用),不管指向的是父类对象还是子类对象,都只会调用父类的析构。当使用多态特性时,如果子类中有需要析构释放的资源,为了避免内存泄漏就需要把父类的析构函数设置为虚函数。当父类的析构函数为虚函数时,子类的析构会自动覆盖它而不用比较它们的名字,当通过父类或引用来释放子类对象时会自动调用子类的析构函数。二、文件流C++把对文件的操作封装到了类中。ifstream 输入文件流ofstream 输出文件流fstream 输入/输出文件流1、打开文件

2020-10-07 10:14:16 117

原创 标准C++05

一、类的继承1、在解决问题时,先查看当前现在的类能否解决部分问题,如果可以则把旧的继承后再拓展来缩短解决问题的时间,降低解决问题的难度,继承就是为了让代码能够重复使用。2、当面临一个复杂问题时,可以先把问题进行分层,每层的类解决一部分问题,然后通过继承进行汇总,最终得到一个解决问题的类。二、继承的基本语法1、继承表一个子类可以继承多个父类,每个类的继承方式可以不同。class 子类:继承方式 父类1,继承方式 父类2,… //继承表{}2、继承方式public 公有继承pri

2020-10-07 10:11:48 102

原创 标准C++04

一、运算符重载C++中是运算符当作函数来看待,所以C++中的运算符可以重载,这样可以让类对象支持运算符,对类对象进行定制化操作。例如:string类就支持很多运算符来代替标准库中的函数。= strcpy+= strlen==|!=|>=|<= strcmp二、双目录运算符重载假如:Test a,b; a+b操作可以调用两种函数Test的成员函数:a是触发者,b是参数Test operator+(cosnt Test& b) const{return a+b; //

2020-09-19 10:37:50 195

原创 标准C++03

类的成员变量存储在每个类对象中(每个对象一份),成员函数存储在代码段中(所有的对象共享一份),那么成员函数是如何区分调用它的是哪个对象?答:与C语言的解决方案一样,把对象的地址传递给成员函数,这样成员函数就知道是哪个对象在调用它,与C语言不同的是该操作是隐藏,编译器帮我们自动完成的,也就是类的成员函数都隐藏着一个参数,这个参数就是this指针。this指针:指向访问成员函数对象的指针,默认是隐藏的,但也可以显示使用。对象调用成员函数时会自动计算它的内存地址传递给成员函数中的this,而在成员函数调用

2020-09-19 10:33:39 671

原创 标准C++02

一、面向对象与面向过程:面向过程:关注解决问题的步骤,算法。面向对象:关注的是谁能解决问题,需要什么样的数据(成员变量),具备什么样的功能(成员函数)。抽象:找出或相像出一个能够解决问题的"对象",通过研究观察对象,找出c"对象"解决问题所必须的数据(属性)、功能(技能)。封装:把抽象的结果归纳为一个结构,然后实例化出结构变量,然后结构变量中的数据和功能相互作用最终解决问题。继承:在封装结构时,可以先分析结构需要的数据和功能现有的结构是具备,如果具备,可以继承现有的结构的代码,达到代码复用的目的。

2020-09-19 10:31:05 343

原创 标准C++01

C与C++的区别int n(int as,bs,int n){}一、C++介绍本贾尼·斯特劳斯特卢普,于1979年4月份贝尔实验室的本贾尼博士在分析UNIX系统分布内核流量分析时,希望有一种有效的更加模块化的工具。1979年10完成了预处理器Cpre,为C增加了类机制,也就是面向对象,1983年完成了C++的第一个版本,C with classes也就是C++。C++与C的不同点:1、C++完全兼容C的所有内容2、支持面向对象编程思想3、支持运算符、函数重载4、支持泛型编程、模板5、

2020-09-19 10:25:32 109

原创 环境编程10

一、基本概念竞争与同步:同一个进程中的线程能共享进程中的绝大多数资源,当它们随意竞争时可以导致资源会破坏、脏数据、不完整、不一致等问题。通过一些方法让进程在竞争资源时相互协调,避免出现数据不完全、不一致等问题,这就叫线程同步。临界区与临界资源:被多个线程同时访问的代码叫临界区,被同时访问的资源叫临界资源。原子操作:中间不会打断的操作叫原子操作。二、互斥量(互斥锁)pthread_mutex_t 是一种数据类型,可以定义变量。int pthread_mutex_init(pthread_mu

2020-09-14 11:30:55 82

原创 环境编程09

一、基本概念1、线程就是进程的进程路线,它是进程内部的控制序列,或者说它是进程的一部分(进程是一个资源单位,线程是的一部分负责真正的执行)。2、线程是轻量级的,没有自己独立的代码段、数据段、bss段、堆、环境变量、命令行参数、文件描述符、信号处理函数、当前目录等资源。3、线程有自己独立的栈内存、线程ID、错误码、信号掩码等。4、一个进程中可以包含多个线程(多个执行路线),但至少有一个,这个线程要主线程,//默认情况下主线程结束其它线程会跟着一起结束。5、ps -T -p 或者使用htop命令查看

2020-09-14 11:28:18 66

原创 环境编程08

一、套接字基本特点:socket是一种接口技术,被抽象成一个文件操作,可以让进程之间通信,也可以让不同计算机的进程通信(网络)。int socket(int domain, int type, int protocol);功能:创建套接字domain:AF_UNIX/AF_LOCAL 本地通信,进程间通信AF_INET 基于IPv4地址通信AF_INET6 基于IPv6地址通信type:SOCK_STREAM 数据流协议SOCK_DGRAM 数据报协议protocol:特殊通信协议,一

2020-09-14 11:24:55 66

原创 环境编程07

基本概念:什么是进程间通信:是指两个或多个进程之间交互数据的过程,因为进程之间是相互独立,为了协同工作必须交互数据。进程间通信的分类:简单的进程间通信:信号、文件、环境变量、命令行参数。传统的进程间通信:管道文件(有名管道、匿名管道)XSI进程间通信:共享内存、消息队列、信号量。网络进程间通信:套接字传统进程间通-管道管道是UNIX系统中最古老的进程间通信方式,古老就意味着所有系统都支持,早期的管道都是半双工,现在有些系统的管道是全双工(但要假定系统仅支持半双工)。管道是一种特殊的文件,它

2020-09-14 11:20:00 55

原创 环境编程06

进程基本概念:1、进程与程序程序就是存储在磁盘上的可执行文件,程序被加载到内存中开始运行叫进程。一个程序可以被多次加载生成多个进程,进程就是处于活动状态的计算机程序。2、进程的分类进程一般分为三种类型:交互进程、批处理进程、守护进程。守护进程一般都处于活跃状态,运行在后台,由于系统在开机时通过启动脚本自动创建的。3、查看进程简单形式:ps 显示当前用户有控制终端的进程信息。列表形式:ps auxw 显示进程详细信息a 所有用户的有控制终端的进程x 无终端控制的进程u 显示进程的详细信息

2020-09-14 11:17:26 76

原创 环境编程05

基本概念1、中断当程序接收消息后中止当前正在执行的程序,转而执行其它任务,等其它任务执行完成后再返回,这种执行模式叫中断,分为硬件中断和软件中断。2、信号是一种软件中断,由操作系统发出,程序接收后会执行相应的操作。3、常见信号kill -l 显示所有信号SIGINT Ctrl+c 终止SIGQUIT Ctrl+\ 终止+coreSIGFPE 除0 终止+coreSIGSEGV 非常内存访问 终止+coreSIGKILL 终止信号 终止4

2020-09-14 11:13:45 66

原创 网络通讯系统

//客户端#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <pthread.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/select.h>#include <netinet/in.h>#

2020-09-07 17:00:47 118

原创 环境编程04

文件同步:1、在写入数据时内存与磁盘之间也有一个缓冲区,这种机制降低了磁盘读写次数,提高了读写的效率。2、但这种机制带来的后果就是磁盘中的数据与实写入的数据不匹配,系统提供了一个函数可以让缓冲区中的数据立即写入到磁盘。void sync(void);功能:把缓冲区中的数据同步到磁盘注意:并不等到数据同步完成后才返回,而是把缓冲区的数据加入到写入队列。int fsync(int fd);功能:把指定文件的内容从缓冲区同步到磁盘注意:会等到完全定稿磁盘才返回int fdatasync(int

2020-08-24 20:23:30 68

原创 环境编程03

系统调用:系统调用就是操作系统提供的一些功能供程序员们调用,这些调用已经被封装成了C函数的形式,但是它们不是标准C的一部分。一般应用程序运行在用户态(使用的是03G的内存),系统调用工作在内存态(使用的是34G的内存)。常用的标准库函数大部分时间运行在用户态,底层偶尔也会调用系统调用进入内核态。系统调用的代码是内核的一部分,其外部接口以函数定义共享库中(linux-gate.so,ld-linux.so),这些接口的实现利用软中断进入内核态执行真正的系统调用。time a.out 测试程序的运行时

2020-08-24 20:21:02 124

原创 环境编程02

一、内存管理用户层STL 自动分配/释放内存 调用C++C++ new/delete 调用CC malloc/free 调用POSIXPOSIX brk/sbrk 调用LinuxLinux mmap/munmap 调用内核系统层kernal kmalloc/vmalloc 调用驱动driver get_free_page二、进程映像程序是存储在磁盘上的可执行文件,当执行程序时,系统会将可执行文件加载到同

2020-08-24 20:17:52 111

原创 环境编程01

程序员必备技能:一门编程语言:C语言、C++数据结构和算法:表 树 图 查找 排序 STL操作系统:Linux系统网络通信:TCP/IP (Socket、TCP、UDP、FTP、HTTP)数据库:MySQL界面设计:Qt课程内容介绍:内存管理文件管理信号处理进程管理进程通信线程管理线程同步网络通信UNIX系统介绍:最早版于1970年问世于贝尔实验室,作者是丹尼斯.里奇和肯.汤普逊。是最早的多用户、多任务、支持多种CPU架构,高安全性、高稳定性、高可靠性。既能构架大型关键

2020-08-24 20:17:10 114

原创 C语言基础06

进制转换:十进制转二进制:求余法:用2对数据求余,然后再对商继续求余,直到商为0结束,过程中产生的余数就是该数据的二进制(逆序)。求权法:数据 - 2^(n-1) 如果可以减 第n位就是1,否则是0。练习1:输入一个正整数m,显示该数据的n(>=2)进制,超过10的用字母显示。二进制转十进制:每位的2^(n-1) 求和10101100 128+32+8+4 172注意:二进制数据转换成八或十六进制是为了方便记录二进制数据。二进制转八进制:三位二进制对应一个八进制。二进制 1 010

2020-08-19 20:55:00 152

原创 C语言基础15

复习:结构:结构是一种由程序员自己设计的一种数据类型,它用于描述一个事物的各项数据,由若干个基础的数据类型组成。设计:struct 结构体名{类型 成员名;…};定义结构变量:struct 结构体名 结构变量名;注意:也可以在设计时直接定义结构变量。访问成员:结构变量名.成员名结构指针->成员名初始化:顺序:struct 结构体名 结构变量名 = {v1,v2,v3,…};指定:struct 结构体名 结构变量名 = {.成员名=v1,…};类型重定义:在C语言中

2020-08-18 22:52:27 192

原创 数据结构11

算法的时间复杂度并不能代表算法的实际执行时间,有些时候看似复杂度高的速度反面快。查找算法:顺序查找:对待查找的数据没有要求,时间复杂度: O(n)二分查找:对待查找的数据必须有序,时间复杂度: O(logn)块查找:是一种数据处理的思想,不是特定的算法,当数据量过多时,可以先把数据进行分块处理,然后再进行查找,例如英语词典。哈希查找:数据 经过哈希函数 计算出数据在哈希表中的位置,然后标记,方便之后的查找,它的时间复试度最快能达到:O(1)。但是该算法有很大局限性,不适合浮点型、字符串型

2020-08-18 22:47:28 74

原创 数据结构10

阾接表:边:顶点下标下一条边的地址顶点:数据指向第一条边的指针图:由顶点组成的数组顶点数量cnt优点:可以节约存储空间,计算入度麻烦。十字链表:边:弧尾下标弧头下标指向相同弧尾的下一条边指向相同弧头的下一条边顶点:数据指向第一条边的指针指向入度的边图:由顶点组成的数组顶点数量cnt阾接多重表:是一种专门存储无向图的一种结构。边:i,j 两个互相依附的顶点的下标inext 指向下一个依附i项点的边jnext 指向下一个依附j项点的边顶点:数据指向

2020-08-18 22:46:50 95

原创 数据结构09

平衡二叉树:前提是有序的二叉树,它的左右子树的高相差不超过1,它的所有的子树也要满足这个要求。如果一个有序二叉树呈单支状(接近单支),它的效率接近链表,因此只有达到平衡时它的效率才最高。由于节点的位置受值的影响,因此只能进行调整,而不能强行修改。二叉树不平衡的基础原因: x y / \ / \ y t1 以为轴向右旋转 z x /

2020-08-18 22:45:54 158

原创 数据结构08

作业:1、把一棵二叉树转换为它的镜像树。2、输入两棵二叉树A,B,判断B是不是A的子结构(我们约定空树不是任意一个树的子结构)。? 3、将一棵有序二叉树转换成一个有序的双向链表。4、计算出有序二叉树中倒数第K个大的数。5、判断一个二叉树是否对称。6、请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。线索二叉树:链式二叉树中有很多空指针,可以让这些指针指向下一个节点,这样在遍历树时可以不用递归而是使用

2020-08-18 22:44:40 53

原创 数据结构07

树型结构:1、树的基本概念一种表示层次关系的(一对多)数据结构。有且仅有一个特定的节点,该节点没有前驱,被称为根节点。剩余的n个互不相交的子集,其中每个子集也都是一棵树,被称为根节点的子树。注意:树型结构具有递归性(树中有树)。2、树的表示方法:倒悬树、嵌套法、凹凸法。3、树的专业术语:节点:组成树的基础元素,同时它也是一棵树。节点的度:该节点子树的数量。树的度(密度):树中节点的数量。叶子节点:节点的度为0的节点。双亲和孩子:节点的子树被称为孩子节点,该节点就是它们的双亲。兄弟:

2020-08-18 22:43:47 177

原创 数据结构06

树型结构:1、树的基本概念一种表示层次关系的(一对多)数据结构。有且仅有一个特定的节点,该节点没有前驱,被称为根节点。剩余的n个互不相交的子集,其中每个子集也都是一棵树,被称为根节点的子树。注意:树型结构具有递归性(树中有树)。2、树的表示方法:倒悬树、嵌套法、凹凸法。3、树的专业术语:节点:组成树的基础元素,同时它也是一棵树。节点的度:该节点子树的数量。树的度(密度):树中节点的数量。叶子节点:节点的度为0的节点。双亲和孩子:节点的子树被称为孩子节点,该节点就是它们的双亲。兄弟:

2020-08-18 22:42:01 62

原创 数据结构05

数组与矩阵:数组:存储空间连接的表结构。矩阵:带二维信息的数据,一般使用二维数据来存储矩阵。特殊矩阵:上三角形矩阵:[0][1][3][6][ ][2][4][7][ ][ ][5][8][ ][ ][ ][9]压缩方法:用一维数组进行存储数组的长度:(n+1)*n/2对应关系:(j+1)*j/2+ii和j要满足:i<=j下三角形矩阵[0][ ][ ][ ][1][2][ ][ ][3][4][5][ ][6][7][8][9]压缩方法:用一维数组进行存储数组的长

2020-08-18 22:40:56 125 1

原创 数据结构04

复习:1、什么是数据结构是专门研究数据关系和操作的学科,而非是计算方法。数据结构+算法=程序2、逻辑结构和物理结构逻辑结构:集合:除了同属于一个集合,数据之间没有任何关系。表:数据之间存在一对一关系。树:数据之间存在一对多关系。图:数据之间存在多对多关系。物理结构:顺序结构:数据存在在连续的内存中,使用数据的相对位置来表示数据之间的关系。链式结构:数据分散存储在内存的任何位置,数据项中有一块指针域用来表示数据之间的关系。逻辑结构和物理结构的对应:表:顺序 链式树:链式 顺序图

2020-08-18 22:39:43 95

原创 数据结构03

复习:1、什么是数据结构是专门研究数据关系和操作的学科,而非是计算方法。数据结构+算法=程序2、逻辑结构和物理结构逻辑结构:集合:除了同属于一个集合,数据之间没有任何关系。表:数据之间存在一对一关系。树:数据之间存在一对多关系。图:数据之间存在多对多关系。物理结构:顺序结构:数据存在在连续的内存中,使用数据的相对位置来表示数据之间的关系。链式结构:数据分散存储在内存的任何位置,数据项中有一块指针域用来表示数据之间的关系。逻辑结构和物理结构的对应:表:顺序 链式树:链式 顺序图

2020-08-06 23:05:34 61

原创 数据结构02

链式表:元素的数据项:数据域:可以是各种类型的若干个数据项指针域:指向下一元素由若干个元素通过指针域连接在一起形成链式表。不带头节点:第一个元素的数据域存储的就是有效的数据。插入删除时可以会修改头节点指针,参数需要使用二维指针。同时需要获取到上一个节点的指针,而头节点没有上一个节点,因此需要额外处理。List item带头节点:第一个元素不使用,仅仅是为了用它来指向下一元素。进入插入、删除操作时会比不带头节点的链表方便。注意:其它操作要从第二节点开始功能爱限的表:对表结构的加

2020-08-06 23:03:29 120

原创 数据结构01

一、什么是数据结构1、数据结构的起源1968年,美国的高纳德教授开设了一门基本算法的课程,开创了数据结构的先河。数据结构是一门研究数据之间关系和操作的学科,而非是计算方法。数据结构+算法=程序 沃思凭借这名个论点,获得图灵奖,这句话展示出了程序的本质。2、数据结构的基本概念数据:所有能够输入到计算机中去描述事物的符号。数据项:有独立含义的数据最小单位,也叫域。数据元素:数据的基本单位也叫节点、记录。数据结构:数据元素和数据关系的集合。算法:数据结构所具备的功能,解决特定的问题的方法。3

2020-08-06 22:58:22 96

原创 C语言基础01

复习:结构:结构是一种由程序员自己设计的一种数据类型,它用于描述一个事物的各项数据,由若干个基础的数据类型组成。设计:struct 结构体名{类型 成员名;…}; 定义结构变量: struct 结构体名 结构变量名; 注意:也可以在设计时直接定义结构变量。 访问成员: 结构变量名.成员名 结构指针->成员名 初始化: 顺序:struct 结构体名 结构变量名 = {v1,v2,v3,...};

2020-08-06 22:54:21 228

原创 通讯录

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <getch.h>static int count = 0; // 有效联系人数量static char name[100][20]; // 姓名static char sex[100]; // 性别static char tel[100][12]; // 电话v

2020-07-29 22:20:00 116

原创 C语言基础14

结构:结构是由程序员自己设计一种数据类型,用于描述一个事物的各项数据,由若干个不同的基础类型组成。设计:struct 结构体名{ 类型 成员名; ...};定义结构变量:struct 结构名 变量名;注意:定义结构变量时,struct不能省略。定义结构变量初始化: struct 结构名 变量名 = {v1,v2,v3}; 要根据成员的顺序初始化 struct 结构名 变量名 = {.成员名=va2,.成员名=v3,...}; 只初始化某

2020-07-29 22:18:41 154

原创 C语言基础13

复习:预处理指令:C代码不能直接被编译器编译,需要一段程序把它翻译一下,负责翻译的程序叫作预处理器,,翻译的过程叫预处理,被翻译的语句叫预处理指令,以#开头都是预处理指令。gcc -E code.c 查看预处理结果gcc -E code.c -o code.i 把预处理的结果保存在文件中。1、文件包含 #include 把一个头文件导入到当前文件中。 #include <> 从系统指定的路径查找并导入头文件。 #include "" 先从当前路径

2020-07-29 22:18:01 144

原创 C语言基础12

复习:1、输出缓冲区程序输出的数据并没有立即写入"文件",而先存储到了缓冲区中,当满足一定的条件后才写入文件:1、从输出切换到输入2、遇到换行符3、程序结束4、缓冲区满4K5、手动刷新 fflush2、输入缓冲区在终端输入数据时此时数据暂由终端保管,当按下回车键,数据由终端写入到程序的输入缓冲区,scanf函数再从输入缓冲区中读取数据赋值给变量。 1、当想从输入缓冲区中读取整型和浮点型数据时,而缓冲区中的数据是字母或符号,此时会读取失败,并且不会从缓冲区中拿走字母或符号,导致接下来

2020-07-29 22:17:09 137

原创 C语言基础11

复习:堆内存管理:1、C语言中没有管理堆内存的语句,只能使用标准库中的函数。#include <stdlib.h>void malloc(size_t size);功能:从堆内存申请size个字节的内存块返回值:内存块的首地址注意:void 在C++编译中不能自动转换成其它类型的指针,如果想让代码在C++中兼容需要强制类型转换。int* p = (int*)malloc(4); void free(void *ptr); 功能:释放一块堆内存 ptr:内存

2020-07-29 22:15:55 187

原创 C语言基础10

什么是堆内存:是进程的一个内存段(text、data、bss、heap、stack),由程序员手动管理,特点就是足够大,缺点就是使用麻烦。为什么使用堆内存:1、随着程序的复杂数量变多。2、堆内存的申请释放受控制。如何使用堆内存:注意:C语言中没控制堆内存的语句,只能使用C标准库提供的函数。#include <stdlib.h>void *malloc(size_t size);功能:从堆内存中申请size个字节的内存,申请内存中存储是什么内容不确定。返回值:成功返回申请到的

2020-07-29 22:14:59 553

原创 C语言基础09

什么是指针:指针是一种数据类型,使用它可以用来定义指针变量,指针变量中存储的其实是整数,这种整数代表了内存的编号。为什么要使用指针:1、函数之间相独立,但有些时候需要共享变量。传参是值传递全局变量容易命名冲突使用数组还需要传递长度命名空间是独立的,但地址空间是同一个,所有指针可以解决这个问题。2、由于函数之间传参是值传递(内存拷贝),对于字节数比较多的变量,值传递效率较低,如果传递变量的地址只需要传递4|8字节。3、堆内存无法取名字,它不能像data、bss、stack让变量名与内存建立联

2020-07-20 23:46:41 77

原创 C语言基础08

复习:自定义函数:1、函数声明 告诉编译器函数的格式,方便它检查调用者的参数、返回值。2、隐式声明 当调用函数时如果没有声明和定义,编译器会猜测函数的格式,函数的形参按照调用者的实参猜测,返回值默认int。3、函数定义 函数的定义出现在调用之前可以省略声明。3、函数传参值传递:普通变量 函数之间不能共享同名变量(局部)。址传递:数组的长度会丢失,需要额外增加一个参数传递数组的长度,同时该数组会被两个函数共享(调用者和被调用者);返回值:return语句不是给把数据传递给调用者,而放在一个他们

2020-07-20 23:45:47 96

空空如也

空空如也

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

TA关注的人

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