自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP协议的粘包问题

TCP协议作为面向字节流的传输协议

2018-08-09 16:41:11 195

原创 Linux线程

线程一个程序中的一个执行流,是一个进程内部的控制序列调度的基本单位每个进程都至少有一个线程 进程和线程的区别 1.进程是内核分配资源的基本单位、线程是调度的基本单位 2.线程在进程地址空间运行,线程执行流比进程更小 3.线程之间大部分共享数据,但也有自己的部分数据:线程ID、寄存器、栈、errno、信号屏蔽字、调度优先级 4.线程的创建/切换比进程轻量化 5.由于进程之间相互...

2018-08-09 16:11:47 172

原创 重排链表

给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例1: 给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例2: 给定链表 1-&a

2018-08-06 10:06:02 293

原创 STL容器迭代器的理解

迭代器迭代器模式:就是提供一种方式,不用暴露出容器内部结构,就可以通过迭代器来访问容器内部元素。 迭代器:迭代器是类模板,表现的像一个指针,一个可以对其执行类似于指针的操作(如:解引用operator*()和递增operator++())的对象,但是又不同与指针,我们可以理解为指针的一层封装。1.定义以及初始化 每一种容器都提供了自己的迭代器,我们以vector为例:vec...

2018-08-04 08:50:36 538

原创 排序算法的实现

1.冒泡排序 顾名思义,冒泡排序就是每次遍历一次数列,将最大(最小)的数放在最前面,然后再重复排序后面剩下的数列,直至排完最后一个数,代码实现。void swap(int &a, int &b){ int tmp = a; a = b; b = tmp;}void Bubble_Sort(int arr[], int n){ int i, j;

2018-08-02 10:51:16 123

原创 进程间通信

进程间通信的目的: 数据传输:一个进程需要将它的数据信息发送给另外一个进程 资源共享:多个进程间共享相同的资源 通知事件:一个进程需要向另外一个或一组进程发送消息,通知它们发生了某种事件 进程控制:有些进程希望完全控制另外一个进程的执行(如Debug进程)此时控制进程希望能够拦截另外一个进程的所有陷入和异常,并能够及时知道它的改变状态我们先讨论经典的IPC方式:管道、FI...

2018-08-01 11:41:31 162

原创 vector的 resize()和reserve()的区别

为了支持快速随机访问,vector将元素连续存储——每个元素紧挨着前一个元素存储。 关于vector对象是如何改变容器大小?resize(n)调整容器元素个数为n,如果n小于容器的原size,则删除多余的元素,否则必须添加新元素并且初始化。resize(n,t)调整容器元素个数为n,并且同时初始化为t。注:若果resize缩小容器,则指向被删除元素的迭代器,引用和指针都会失效;...

2018-07-26 09:27:11 999

原创 全排列Permutation

Permutations Given a collection of numbers, return all possible permutations.For example, [1,2,3] have the following permutations: [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].解法一:调...

2018-07-11 18:02:28 296

原创 TCP的三次握手与四次挥手

TCP协议TCP全称为“传输控制协议”,是要对数据的传输进行一个详细的控制。 TCP协议段格式: 1.源/目的端口号:表示数据从哪个进程来,到哪个进程去;2.32位序号/32位确认号:TCP中传输的数据每个字节都按序号排列/是期待收到对方下一个报文的第一个数据字节的序号3.4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部的最大长度为15*4...

2018-06-21 21:16:40 165

原创 fd和FILE结构体

系统文件I/O先从代码中来看://写文件int main(){ umask(0); int fd=open("myfile",O_WRONLY|O_CREAT,0644); if(fd<0) { perror("open"); return 1; int count=5; const char*msg...

2018-05-30 15:32:43 313

原创 智能指针的用法

产生原由:当你在堆中分配出一块内存,即使用new或者malloc出来的空间,也需要自己手动去调用delete或者free去析构这块空间,但是忘记析构的时候,会产生内存泄漏等问题,此时产生了智能指针来解决此类问题。 智能指针类型:auto_ptr,scoped_ptr,shared_ptr,weak_ptr

2018-05-12 09:09:34 1057

原创 栈和队列

栈:是限制只能在一端进行插入和删除的线性表 (1)能进行插入和删除操作的一端称为栈顶,另一端称为栈底 (2)栈遵循后进先出的原理,即入栈顺序为1,2,3,4;则出栈顺序为4,3,2,1 栈的实现template<class T>class MyStack{public: MyStack() :_ptr(NULL) , _size(0)

2018-05-05 17:47:38 154

原创 linux环境下的进程

进程:程序的一个执行实例,正在运行的程序等,同时是分配系统资源的基本单位描述进程(PCB):在linux环境下用task_struct的结构体来描述进程,该结构体包含了进程所需要的所有信息。 task_struct:是内核中linux下的一种数据结构,它会被装载在RAM下包含进程的信息。 内容分类:标识符:进程的唯一标识符,区别于其他进程状态:任务状态,退出代码,退出信号优...

2018-05-01 12:12:45 190

原创 菱形继承

菱形继承是什么? 如上图,派生类B和C共同继承了基类A,基类D又同时继承了B和C。 代码如下:class Person{public: string _name;}class Student:public Person{protected: int _num;}class Teacher:public Person{protected: int _id

2018-04-10 17:27:05 157

原创 深浅拷贝/写时拷贝

在我们实现string类的时候会需要用到字符串的拷贝,会有一下三种方法:浅拷贝、深拷贝、写实拷贝浅拷贝: 浅拷贝的实现#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class String{public: String(const char*str) :_str(new ch

2018-04-10 16:49:56 169

原创 单链表的部分面试题

#include&lt;iostream&gt;using namesapce std;struct Node{DataType data;Node*next;};//链表逆序输出(不改变链表)void ReversePrint(Node*pHead){ if(pHead==NULL) return NULL; if(pHead-&gt;next1!=NULL) {

2018-04-09 17:34:33 150

原创 atoi和itoa的模拟实现

#include<stdio.h>#include<ctype.h>#include<iostream>#define MAX (0x7fffffff)#define MIN (0x8000000)int my_atoi(const char*str){ if(str==NULL) return 0; const char*p=str; int flag=

2018-04-03 09:23:46 115

原创 string函数的模拟实现

#include<stdio.h>#include<assert.h>size_t my_strlen(const char*str)//求字符串长度{ int length; for(length=0;*str!='\0';++length) { str++; } return length;}char *my_strcpy(char*

2018-04-01 11:11:33 158

原创 memcpy的实现

函数原型:void *memcpy(void *dest, const void *src, size_t n) 功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。 注:src和dst都不一定是数组,任意的可读写的空间均可拷贝,在实现时一定要考虑内存重叠问题。#include<stdio.h>void*my_memcpy(void* dst,co

2018-04-01 10:31:38 929

原创 vector和list的使用

vector是C++标准模板库中的部分内容,是一种容器。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 使用它时需要包含头文件:#include vector类型的初始化: vector a ; //声明一个int

2017-11-04 23:39:14 1413

原创 多态+多态对象模型

多态?字面意思即为多种形态;C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖或者称为重写;当使用基类的指针或引用调用重写的虚函数时,当指向父类调用的就是父类的虚函数,指向子类的就是子类的虚函数。 单继承&多继承单继承:一个子类只有一个直接父类时称这个继承关系为单继承。 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承。

2017-10-10 14:12:19 249

原创 c++重载

1.什么是函数重载? 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的浪费,对于程序的可读性有很大的好处。 **借助函数重载交换不同类型的值重点内容** 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明? C++提供了C

2017-09-24 11:36:26 192

原创 c++指针与引用

引用:引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名常引用:常引用声明方式:const 类型标识符&引用名=目标变量名; 用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目

2017-08-02 22:36:50 222

原创 c/c++动态内存管理

c语言的动态内存管理: C语言使用库函数中的malloc/calloc/realloc/free进行动态内存管理 1.malloc:在内存中开辟一块指定大小的空间,将空间首地址给指针变量。 函数声明:void*malloc(size_t size); 如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 2.calloc:在内存的动态存储区中分配n个长度为size的连续空

2017-07-26 22:57:52 278

空空如也

空空如也

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

TA关注的人

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