自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++设计模式-单例的实现以及使用场景

模式 在一定环境中解决某一问题的方案,包括三个基本元素--问题,解决方案和环境。         大白话:在一定环境下,用固定套路解决问题。设计模式(Design pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编...

2018-09-16 09:28:54 2265

原创 string类的基本操作

#include "iostream"using namespace std;//#include "algorithm"#include "string"void main01(){ //string 的初始化 string s1 = "zhangwentao"; string s2("liqimeng"); string s3(10, 'a'); //string...

2018-08-19 20:33:45 377

原创 list容器的基本操作

#include "iostream"using namespace std;#include "vector"class Teacher {private: int age; char *name;public: Teacher(int age = 0, char *name = NULL) { int n = strlen(...

2018-08-19 20:25:33 392

原创 vector容器和list容器简要总结

(1.1)vector的头文件#include <vector>using std::vector;vector<int> v_ints;或std::vector<int> v_ints; (1.2)vector的构造  vector<int> first; // empty vector of ints ...

2018-08-19 20:24:45 723

原创 抽象类小案例

/*编写一个C++程序, 计算程序员( programmer )工资1 要求能计算出初级程序员( junior_programmer ) 中级程序员 ( mid_programmer )高级程序员( adv_programmer)的工资2 要求利用抽象类统一界面,方便程序的扩展, 比如:新增, 计算 架构师 (architect ) 的工资*/#include "iostream"...

2018-08-14 15:02:37 549

原创 进程间通信之系统V共享内存

1.进程间所有需要共享的数据都放在一个叫做IPC共享内存区域的地方,所有需要访问该共享内存区域的进程都要把 该共享区域映射到本进程的内存空间中去。2.int shmget(key_t key, int size, int shmflg);   用来创建共享内存。3.char * shmat(int shmid, char *shmaddr, int flag);   进程用以映射共...

2018-08-10 12:26:28 156

原创 在数组类中重载[ ], =, ==, !=

// Array.h#pragma once#include "iostream"using namespace std;class Array{private: int m_length; int *m_space;public: Array(int length); ~Array(); Array(Array const &obj); int len...

2018-08-09 18:45:12 2445

原创 重载 [] 运算符

1. 下面的例子中,实现了在数组类中,如何重载 [] 运算符,使这个数组类看起来“更像一个数组”。2.函数定义写法步骤:  (1)首先要承认运算符重载实质就是函数调用。  (2)承认operator[] 就是函数名。  (3)将参数列表补齐,比如a[ i ], 那么i 就是参数;==> operator(int i);    (4)  根据情况填写返回值。这一点需要强调(...

2018-08-08 21:48:21 1295

原创 重载 = 运算符实现深拷贝

1.前面已经叙述过浅拷贝的问题,当类成员含有指针时,可以通过显示编写拷贝构造函数的方法,实现用一个类初始化另一个类的深拷贝。2.但是如果是赋值运算,即例子中的 obj2 = obj1,则不会调用拷贝构造函数,这个时候需要通过重载 = 运算符的方式实现深拷贝,步骤已经在代码注释中提出。#include "iostream"using namespace std;class Loc...

2018-08-08 20:21:10 1065

原创 C++友元函数和友元类的简要复习

1.友元函数:声明形式: friend void modifyTest(Test *pT, int _a);友元函数可以在类外访问类的私有成员。2.友元类声明形式:friend class B;   声明B是Test的友元类,B中可以访问Test的私有成员。 例子:#include "iostream"using namespace std;class Te...

2018-08-07 21:20:30 140

原创 消息队列服务器客户端测试

//server.c#include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/ip...

2018-08-07 21:13:12 401

原创 进程间通信之消息队列

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

2018-08-07 20:57:22 221

原创 c++中静态成员和静态成员函数

1.静态成员属于整个类2.静态成员函数不能使用普通成员变量,只能使用静态成员。//Location.h#pragma onceclass Location{public: Location(int a); ~Location(); void printB(); void ADD(); static void out();private: int m_a; sta...

2018-08-06 17:51:59 166

转载 new 和 malloc的区别

1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1.2 v...

2018-08-06 17:32:53 105

原创 C++中的深拷贝和浅拷贝

浅拷贝问题是学习C++时候常见的问题,形成这个问题的原因用代码和画图的方式呈现 #include "iostream"using namespace std;class Location{public: Location(char *p) //一个参数的构造函数 { m_len = strlen(p); m_p = (char *)mallo...

2018-08-05 21:24:19 260

原创 进程间通信之信号

1.信号本质:信号是在软件层上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断信号可以说是一样的。2信号种类:信号分为可靠信号和不可靠信号。 实时信号和非实时信号。  非实时信号都不支持排队,都是不可靠信号;实时信号都支持排队,都是可靠信号。3.信号处理方式:(1)忽略信号。即对信号不做任何处理,其中,有两个信号不能忽略,即SIGKILL和SIGSTOP。(...

2018-08-05 16:48:29 163

原创 进程间通信之有名管道

  普通管道应用的一个重大限制就是他没有名字,因此只能用于具有亲缘关系的进程之间通信,有名管道很好的克制了这个限制,FIFO不同于普通管道之处在于他提供了一个路径名与之关联,以FIFO的文件形式存在于文件系统中。这样,即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通信。 int mkfifo(const char*pathname, mode_t mode);...

2018-08-04 20:24:03 213

原创 C++拷贝构造函数的调用时机

c++中为我们提供了拷贝构造函数这一概念,这些天复习C++知识点,稍做总结。以下列出了拷贝构造函数的4种调用时机。1.使用一个对象t1 给另一个对象t2 初始化时  Test2 t1(1, 2);    Test2 t2 = t1;2.或者使用 括号的方法 Test2 t3(t1);#include "iostream"using namespace std;class Te...

2018-08-03 21:20:38 279 1

原创 strcpy,strncpy,strncpy_s的区别

首先说下strcpystrcpy()是依据源串的\0作为结束判断的,不检查copy先的Buffer的Size,如果目标空间不够,就有BufferOverflow问题。strncpy的原型为:char * strncpy(char *dest, char *src, size_t n);其将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,...

2018-08-03 16:27:10 2171

转载 Linux下实现简单的线程池

定义         什么是线程池?简单点说,线程池就是有一堆已经创建好了的线程,初始它们都处于空闲等待状态,当有新的任务需要处理的时候,就从这个池子里面取一个空闲等待的线程来处理该任务,当处理完成了就再次把该线程放回池中,以供后面的任务使用。当池子里的线程全都处理忙碌状态时,线程池中没有可用的空闲等待线程,此时,根据需要选择创建一个新的线程并置入池中,或者通知任务线程池忙,稍后再试。 ...

2018-08-02 20:42:41 283

原创 Linux进程间通信---管道通信

1.进程间通信的目的:   1.数据传输  2.共享数据  3.通知事件  4.资源共享  5.进程控制2.进程间通信的方法:   1.管道(Pipe)和有名管道(FIFO)   2.信号(Signal)   3.消息队列   4.共享内存(Shared Memory)   5.信号量(Semaphore)   6.套接字(Socket) (1)管道通信:管...

2018-08-01 21:33:59 114

原创 C++中指针的引用(一定程度代替二级指针)

#include "iostream"using namespace std;struct Teacher{ char name[64]; int age;};int getTeacher(Teacher **p){ Teacher *tmp = NULL; if (p == NULL) { return -1; } tmp = (Teacher *)mallo...

2018-08-01 19:57:03 947

原创 Linux进程基础知识梳理

 1.什么是进程?为什么要有进程:   程序的一次执行就是一个进程。引入进程这是为了实现并发技术,就是可以在同一时间同时执行多项任务的技术。2.Linux进程分类:   1.交互进程   2.批处理进程   3.守护进程3.进程的三态:   1.就绪状态。当进程已经分配到除CPU以外所有的必要的资源,只要活得处理器便可以立即执行,这时的状态就是就绪态。   2.执行状态。当...

2018-08-01 17:34:02 321

原创 C++中常引用做形参

1.C++中引用可以在一定程度上代替二级指针的作用,比如下面代码中的getTeacher2()函数中,形参使用用指针的引用,代替了二级指针。 2.还可以用定义常引用的方式,实现用字面量给引用赋值,字面量没有内存空间,所以在初始化时C++编译器会偷偷地给引用分配内存空间,但是字面量还是没有内存空间。#include "iostream"using namespace std;stru...

2018-07-30 20:53:23 2192

原创 C语言中const和C++中const关键字的区别

 # include "iostream"using namespace std;struct Teacher{    char name[30];    int age;};void operatorTeacher(Teacher *pT){    cout << pT->age<<endl;}void operatorTeach...

2018-07-29 21:23:54 985

原创 C++中引用的基本知识总结

总结:引用是c++的语法范畴。本质就是给变量取一个别名,操作这个别名就是操作这个变量本身。可以通过引用做函数形参的方式实现C语言中指针的一些功能,示例代码如下。 #include "iostream"using namespace std;int main01(){    int a = 10;    int &b = a;                   //引...

2018-07-29 21:19:41 164

原创 char *str 和 char str[] 的区别

以前一直觉得这两个有区别,但也没深究,今天写了个代码报了警告于是就看了看,总结如下。例如如下代码:#include<iostream>using namespace std;int main(){ char *p1 = "abcd"; char p2[] = "1234"; return 0;}这二者的区别还在于:1. p1是一个指针变量,...

2018-07-26 10:31:10 818

原创 字符串- 查找子串

主要的思路就是,不断的从母串 str1 中取出和子串长度相等的临时子串 temp_str,与子串 str2 进行比较。没有找到子串,返回 -1;成功找到子串,返回子串首字母在母串中的位置,该位置从 0 开始。#include <stdio.h>#include <string.h>char temp_str[30]; // 临时子串void ReadS...

2018-07-25 17:04:59 913

原创 字符串逆序输出

C语言实现对字符串的逆序输出方法一:#include <stdio.h>#include <stdlib.h>#include <string.h>void Inverse(char str[], char ptr[]);int main(){ char str[100]; char ptr[100]; printf(...

2018-07-25 16:30:07 652

转载 TCP三次握手和四次挥手详细讲解

TCP的报头:1. 源端口号:表示发送端端口号,字段长为16位。2. 目标端口号:表示接收端口号,字段长为16位。3. 序列号:表示发送数据的位置,字段长为32位。每发送一次数据,就累加一次该数据字节数的大小。注意:序列号不会从0或1开始,而是在建立连接时由计算机生成的一个随机数作为其初始值,通过SYN包发送给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。4. ...

2018-07-25 14:38:22 200

原创 队列的顺序结构

#include <stdio.h>#define OK 1#define ERROR 0#define MAXSIZE 1024    // 循环队列    //******************************************************    //计算队列当前长度通用公式:(rear-front+MSXSIZE)%MAXSIZE   ...

2018-07-24 18:50:19 219

原创 链队列实现代码

#include <stdio.h>#define OK 1#define ERROR 0typedef struct QNode{    int data;    struct QNode *next;}QNode, *QueuePtr;typedef struct{    QueuePtr front;    QueuePtr rear;}LinkQu...

2018-07-24 18:49:18 826

转载 malloc函数

malloc函数编辑 锁定 同义词 malloc一般指malloc函数malloc函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间。malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。返回类型是 void* 类型。void* 表...

2018-07-24 15:43:14 1769

原创 两栈共享空间实现

  关键思路:1.两栈的栈顶指针top1,和top2,分别由数组两端向中间靠拢,如果top1 + 1 == top2(两个指针相遇)即为栈满的判定条件。2.栈1为空时 top1 = -1;  栈2为空时 top2 = MAXSIZE(即数组的最大长度)。3.设置判定条件,如果两个栈顶指针不相遇,则该栈就可以一直使用。 实现代码如下:#include <stdio.h&...

2018-07-23 21:24:36 1741

原创 LINUX 基础命令

系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示C...

2018-07-23 19:49:38 117

原创 链表详细知识点

一、链表原理(1)链表的组成        链表是由若干个节点组成的(链表的各个节点结构是完全类似的),节点是由有效数据和指针组成的。有效数据区域用来存储信息完成任务的,指针区域用于指向链表的下一个节点从而构成链表。(2)链表的作用        时刻谨记:链表就是用来解决数组的大小不能动态扩展的问题,所以链表其实就是当数组用的。直白点:链表能完成的任务用数组也能完成,数组能完成的...

2018-07-21 17:52:47 758

转载 栈和队列

栈> 栈(stack)又名堆栈,它是一种特殊的线性表。元素之间成线性结构。在c++中其头文件为<stack>特性:运算受限制,只允许在栈顶进行插入删除操作,插入叫做进栈,入栈或者压栈(push),删除叫做出栈(pop),由于有这种特性,所以著名特点是后进先出。定义:stack<type>s现在展示一道题进行讲解吧,话不多说请看题,杭电acm题 ...

2018-07-21 17:47:48 117

原创 struct 和 typedef struct

struct和typedef struct分三块来讲述:  1 首先://注意在C和C++里不同    在C中定义一个结构体类型要用typedef:    typedef struct Student    {    int a;    }Stu;    于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)   ...

2018-07-20 16:05:51 98

转载 静态库和动态库的区别

 我们大家在编程过程中对“链接”这个词并不陌生,链接所解决的问题即是将我们自己写的代码和别人写的库集成在一起。链接可以分为静态链接与动态链接,下文将分别讲解这两种方式的特点与其区别。静态链接特点:在生成可执行文件的时候(链接阶段),把所有需要的函数的二进制代码都包含到可执行文件中去。因此,链接器需要知道参与链接的目标文件需要哪些函数,同时也要知道每个目标文件都能提供什么函数,这样链接器才能知道是...

2018-03-08 20:13:05 129

转载 链表的基本操作

内容包括链表的创建,增加、删除节点,链表的逆序、排序和销毁等。[cpp] view plain copy #include  #include    typedef struct node  {      int data;      node* pNext;  }Node;    //链表的操作,以有头节

2017-01-19 20:31:46 164

空空如也

空空如也

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

TA关注的人

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