自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式之观察者模式

Observer 模式应该可以说是应用最多、影响最广的模式之一,因为 Observer 的一个实例 Model/View/Control( MVC) 结构在系统开发架构设计中有着很重要的地位和意义, MVC实现了业务逻辑和表示层的解耦。在 MFC 中, Doc/View(文档视图结构)提供了实现 MVC 的框架结构。在 Java 阵容中, Struts 则提供和 MFC 中 Doc/View ...

2019-01-28 17:44:26 179

原创 C++ 工厂设计模式

简单工厂模式生活例子吃饭是人的基本需求,如果人类不需要吃饭,可能我们就能活得清闲许多,也就不需要像现在一样没日没夜的工作,学习。我们学习是为了找到更好的工作,好工作为了赚更多的钱,最终为了吃饱饭,吃好饭。因此可以说吃饭是与人息息相关,下面就从吃饭的例子来引入工厂模式的学习。如果你想吃饭了,怎么办自己做吗?自己做就相当于程序中直接使用new。当然是自己下个指令,别人来做更爽。那就把做饭的任务交...

2019-01-27 19:22:43 1034

原创 C++之设计模式(一)

1.单例模式作用:保证一个类只有一个实例,并提供一个访问它的全局访问点,使得系统中只有唯一的一个对象实例。应用:常用于管理资源,如日志、线程池实现要点:在类中,要构造一个实例,就必须调用类的构造函数,并且为了保证全局只有一个实例,需防止在外部调用类的构造函数而构造实例,需要将构造函数的访问权限标记为private,同时阻止拷贝创建对象时赋值时拷贝对象,因此也将它们声明并权限标记为priv...

2019-01-26 21:44:48 236

原创 C++之throw和exception

throw 是C++中的关键字,用来抛出异常。如果不使用 throw 关键字,try 就什么也捕获不到; at() 函数在内部也使用了 throw 关键字来抛出异常。throw 既可以用在标准库中,也可以用在自定义的函数中,抛出我们期望的异常。throw 关键字语法为:throw exceptionData;exceptionData 是“异常数据”的意思,它既可以是一个普通变量,也可以是...

2019-01-26 13:00:02 2232

原创 输入输出流 学习笔记(一)

1 C++的输入和输出1.1输入和输出的含义程序的输入指的是从输入文件将数据传送给程序;程序的输出指的是从程序将数据传送给输出文件。C++的输入和输出包括以下三方面的内容:a) 对系统指定的标准设备的输入和输出,简称标准I/O;b) 以外磁盘文件为对象进行输入和输出,简称文件I/O;c) 对内存中的指定的空间进行输入和输出,简称为串I/O。1.2 C++的I/O对C的...

2019-01-24 21:43:20 321

原创 函数对象与谓词

在C++中,在应用程序运行阶段存在的所有实体都是对象,因此struct和class也可用作函数,这称为函数对象。注意,函数也可通过函数指针来调用,他们也是函数对象。从概念上说,函数对象是用作函数的对象;但从实现上说,函数对象是实现了operator()的类的对象。虽然函数和函数指针也可以归为函数对象,但实现了operator()的类的对象才能保存状态(即类的成员属性的值),才能用于STL算法。...

2019-01-23 20:57:42 186

原创 容器set(二)

简介:set里面每个元素只存有一个key,它支持高效的关键字查询操作。set对应数学中的“集合”。特点:储存同一类型的数据元素(这点和vector、queue等其他容器相同)每个元素的值都唯一(没有重复的元素)根据元素的值自动排列大小(有序性)无法直接修改元素高效的插入删除操作声明:set aset a={0,1,6,2,3};for(auto it = a.begi...

2019-01-23 09:15:05 352

原创 STL 容器map(一)

map 是一种有序无重复的关联容器。关联容器与顺序容器不同,他们的元素是按照关键字来保存和访问的,而顺序元素是按照它们在容器中的位置保存和访问的。map保存的是一种 key - value 的pair对象,其中 key 是关键字,value 是关键字对应的值。通过 key找到对应的 value。map中按照 key的大小升序排列pair对象。typedef pair<const Key...

2019-01-22 21:49:20 119

原创 容器set(一)

1、Set的特点:①、存入Set的每个元素在Set中都是唯一的 ②、输出的时候不保证元素的次序2、Set延生的四种类型:①、HashSet:为快速查找而设计的,存入Set的元素必须实现hashCode()方法②、TreeSet:输出的时候保证元素的优先顺序(不是按照输入时候的顺序,而是根据元素的大小)。存入Set的元素必须实现Comparable接口③、LinkedHashSet...

2019-01-22 13:05:52 333 2

原创 栈与队列 回顾

一 基础知识均为线性表,可以由数组或链表实现栈:先进后出,操作均在栈顶进行队列:先进先出,队尾进,队首出STL stack & queuestack 常见操作:s.push(x):入栈 (void类型)s.pop(): 出栈 (void类型,只删除,不返回元素)s.top(): 返回栈顶元素s.size():返回栈元素个数s.empty() :判断栈是否...

2019-01-21 14:23:02 170

原创 复习树的遍历

#include<iostream>#include<stdlib.h>using namespace std;typedef char ElemType;//二叉树的二叉链表结构,也就是二叉树的存储结构,1个数据域,2个指针域(分别指向左右孩子)typedef struct BiTNode{ ElemType data; struct ...

2019-01-20 22:17:11 141

原创 c++中队列类模板的实现

//队列类模板定义template <class POINT_TYPE,int MAX_POINTS> class VarQueue{public: VarQueue() { m_MaxCount=MAX_POINTS; m_Count=0; } VarQueue(unsigned int MaxCount) ...

2019-01-19 20:58:10 1924

原创 C++类模板、模板类初识

在C++的Template中很多地方都用到了typename与class这两个关键字,有时候这两者可以替换,那么这两个关键字是否完全一样呢?事实上class用于定义类,在模板引入c++后,最初定义模板的方法为:template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符...

2019-01-18 19:44:37 132

原创 C++操作符重载operator

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。一、为什么使用操作符重载?对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的...

2019-01-14 20:47:48 326

原创 C++ new和delete(C++动态分配和释放内存)

数组的长度是预先定义好的,在整个程序中固定不变。C++ 不允许定义元素个数不确定的数组。例如:int n;int a[n]; //这种定义是不允许的但是在实际的编程中,往往会出现所需的内存空间大小取决于实际要处理的数据多少,而实际要处理的数据数量在编程时无法确定的情况。如果总是定义一个尽可能大的数组,又会造成空间浪费。何况,这个“尽可能大”到底应该多大才够呢?为了解决上述问题,C++ ...

2019-01-12 19:50:01 1079

原创 C++初解(一)

类成员函数:类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类访问修饰符:类成员可以被定义为 public、private 或 protected。默认情况下是定义为 private。构造函数 & 析构函数:类的构造函数是一种特殊的函数,在创建一个新的对象时调用。类的析构函数也是一种特殊的函数,在删除所创建的对象时调用。C++ 拷贝构...

2019-01-11 22:26:29 163

原创 简谈udp打洞和tcp打洞

UDP打洞技术:对于两个peer,A和B。1、若A和B位于同一个nat之后。如果nat支持回环转换,A和B之间打洞时使用彼此的外网地址是可以连通的。但是最好是优先尝试内网连接。2、若A和B位于不同的nat之后。若两个nat都是公网地址,则属于“典型”连接过程,连接相对简单可靠。3、若A和B位于多级nat之后。a)A和B有相同的出口nat。则使用内网地址连接,可能会存在明显错误...

2019-01-10 22:31:08 2170

原创 linux c学习笔记----TCP基础客户/服务编程(socket,bind等)

socket(建立一个socket通信)相关函数accept,bind,connect,listen表头文件#include<sys/types.h>#include<sys/socket.h>定义函数int socket(int domain,int type,int protocol);函数说明socket()用来建立一个新的socket,也就是向系...

2019-01-08 20:42:54 832

原创 Linux C部分总结1.0

第一部分——复习总纲一、基础1.Linux是谁开发的、是用什么语言开发的、Unix的开源精神——这些2.分区的基本知识(今年不考?)3.文件系统4.安装软件的方式(简单看一下,apt-get要知道,其他不用)5.命令:常用的命令6.文件类型——七种7.基本命令——文件系统相关(过一遍)7.硬链接和符号链接:8.文件属性(ls -l,很重要哒)9.文件属性修改(chmod, c...

2019-01-07 19:41:55 306

原创 多路复用之select网络编程

用基本的Linux/Unix基本函数加上select调用编写一个完整的服务器和客户端例子,可在Linux(ubuntu)和Unix(freebsd)上运行客户端从标准输入读入一行,发送到服务端服务端从网络读取一行,然后输出到客户端客户端收到服务端的响应,输出这一行到标准输出服务端#include <unistd.h>#include <sys/types.h&gt...

2019-01-06 22:39:47 185

原创 线程池 ------ linux C实现

大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数非常频繁,那么服...

2019-01-05 19:58:00 96

原创 进程和线程的区别

进程和线程的区别进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。一个程序至少一个进程,一个进程至少一个线程。为什么会有线程?每个进程都有自己的地址空间,即进程空间,在网络或多用户换机下,一个服务器通常需要接收大量不确定数量用户的...

2019-01-04 22:59:36 225

原创 Linux C 网络编程(一)

OSI七层网络模型建立七层网络模型的目的是为了让不同的制造商在网络上通信,比如我A主机是苹果公司生产,操作系统是苹果,B主机是IBM公司生产,操作系统是windows,在AB主机软硬件都不同的情况下通过七层网络模型就可以互相通信了。下面阐述一下各层的作用:1 应用层 就是应用软件,定义一些网络通信和数据传输的接口。2表示层 掩盖系统中数据格式的不同性,制定独立结构的数据传输格式,差不多跟...

2019-01-03 22:50:53 114

原创 Linux C 中4种互斥锁简述

1.互斥锁类型1.普通锁 (PTHREAD_MUTEX_NORMAL)互斥锁默认类型。当一个线程对一个普通锁加锁以后,其余请求该锁的线程将形成一个等待队列,并在该锁解锁后按照优先级获得它,这种锁类型保证了资源分配的公平性。一个线程如果对一个已经加锁的普通锁再次加锁,将引发死锁;对一个已经被其他线程加锁的普通锁解锁,或者对一个已经解锁的普通锁再次解锁,将导致不可预期的后果。2.检错锁(PT...

2019-01-02 17:47:02 1287

原创 gdb简单命令手册

awatch 设置观察点,无论何时指定位置的值被读或写了,程序执行都会停下来。backtrace 向后打印出栈的内容,显示将程序带到当前位置的函数调用和参数值。该命令可简写为bt。break 设置断点,程序运行会在指定的行或函数名处中断。clear 清除某行或函数上由先前break设置的断点。continue 继续先前被调试器中断的程序的执行。Ctrl-C ...

2019-01-01 21:29:55 76

原创 linux c学习笔记----信号(sigaction,sigaddset,sigprocmask)

sigaction(查询或设置信号处理方式)相关函数signal,sigprocmask,sigpending,sigsuspend表头文件#include<signal.h>定义函数int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);函数说明sigaction(...

2018-12-31 22:39:21 2775

原创 linux c学习笔记----文件的创建与读写(open,read,write)

open(打开文件)相关函数read,write,fcntl,close,link,stat,umask,unlink,fopen表头文件#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>定义函数int open( const char * pathname, int flags)

2018-12-30 21:56:08 898

原创 linux c学习笔记----文件的属性(access,stat,fstat)

access(判断是否具有存取文件的权限)相关函数stat,open,chmod,chown,setuid,setgid表头文件#include<unistd.h>定义函数int access(const char * pathname,int mode);函数说明access()会检查是否可以读/写某一已存在的文件。参数mode有几种情况组合,R_OK,W_OK,X_OK ...

2018-12-30 21:55:38 499

原创 linux c学习笔记----消息队列(ftok,msgget,msgsnd,msgrcv,msgctl)

ftok()#include <sys/types.h>#include <sys/ipc.h>函数原型: key_t ftok( const char * pathname , int proj_id );参数:pathname 就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255)...

2018-12-28 22:14:56 449

原创 线程创建,退出,等待,分离

线程的基本概念线程是在进程内部运行的一个执行分支,它是运行在进程的地址空间中。和进程之间的独立性不同,线程之间更强调共享性,它共享进程的地址空间,比如数据段,代码段,堆。。。以及文件描述符表。因此,无论是线程的创建,终止,切换的代价都要比进程小很多,线程之间可以直接通信而不需要向进程通信那么麻烦(共享内存,消息队列,信号量等机制),当然有优点就有缺点,由于线程强调共享性,一个进程内的所有线程是...

2018-12-27 18:02:51 150

原创 linux c学习笔记----管道文件(pipe,popen,mkfifo,pclose,dup2)

pipe(建立管道)相关函数mkfifo,popen,read,write,fork表头文件#include<unistd.h>定义函数int pipe(int filedes[2]);函数说明pipe()会建立管道,并将文件描述词由参数filedes数组返回。filedes[0]为管道里的读取端,filedes[1]则为管道的写入端。返回值若成功则返回零,否则返回...

2018-12-26 21:52:06 784

原创 linux c学习笔记----信号(alarm,kill,singal)

alarm(设置信号传送闹钟)相关函数signal,sleep表头文件#include<unistd.h>定义函数unsigned int alarm(unsigned int seconds);函数说明alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回...

2018-12-25 22:46:15 150

原创 学习笔记之进程控制

多用户:多个用户同一时间使用计算机多任务:同时执行几个任务,并且可以在还没有执行完一个任务的时候执行另一个任务程序:静态,保存在硬盘上的可执行代码进程:动态,运行中的程序,表示过程(操作系统资源管理的最小单位)线程:在进程内部,比进程更小的能独立运行的基本单位   PS.与同属一个进程的其他线程共享进程拥有的全部资源   一个线程可以创建和撤销另一个线程,同进程的多个线程可以并行执行(...

2018-12-24 17:30:50 108

原创 C语言文件操作详解

C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有: 文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 文件的读写操作fgetc 从文件中读取一个字符  fputc 写一个字符到文件中去  fgets 从文件中读取一个字符串  fputs 写一个字符串到文件中去  fprint...

2018-12-20 17:15:12 1471

原创 C语言 打开文件open函数

头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>定义函数:int open(const char * pathname, int flags);int open(const char * pathname, int flags, mode_t mode);...

2018-12-20 12:55:22 2962

原创 C语言 单向链表 及其排序

#include<stdio.h>#include<malloc.h>#define LEN sizeof(struct Student)struct Student //结构体声明{ long num; int score; struct Student* next; }; int n; struct Studen...

2018-12-19 22:08:48 10613 1

原创 C语言实现 排序算法初识

1、冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。1.1 算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,...

2018-12-18 22:13:43 129

原创 树的基本操作

(1)节点的定义typedef struct BTNode{ int data; struct BTNode *lChild; struct BTNode *rChild;}BiTNode;(2)二叉树的创建//先序创建二叉树int CreateBiTree(BiTNode **T){ int ch; scanf("%d",&ch);...

2018-12-17 22:28:27 131

原创 栈与队列基本操作

一、链表的基本操作#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//头插法 LinkList create_list_head(int n){ LinkList head = (Lin...

2018-12-16 22:49:00 142

原创 指针 总结

前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:int p; //这是一个普通的整型变量 int *p...

2018-12-14 22:50:02 92

空空如也

空空如也

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

TA关注的人

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