自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 string类的写时拷贝与引用计数

由于浅拷贝使多个对象共用一块内存地址,调用析构函数时导致一块内存被多次释放,导致程序奔溃。实现string类的时候通常显示的定义拷贝构造函数和运算符重载函数。由于释放内存空间,开辟内存空间时花费时间,因此,在我们在不需要写,只是读的时候就可以不用新开辟内存空间,就用浅拷贝的方式创建对象,当我们需要写的时候才去新开辟内存空间。这种方法就是写时拷贝。在构造函数中开辟新的空间时多开辟4个字节的空

2016-08-31 11:19:56 694 1

转载 c++之pair

Pair类型概述pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: pair a;表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。 pair a("James", "Joy");也可以像上面一样在定义的时候直接对其初始化。 由于p

2016-08-26 22:19:17 700

原创 二叉树中找两个结点的最近公共祖先结点

一、搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树。也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大。我们只需要从根结点开始和两个结点进行比较。如果当前结点的值比两个结点都大,则最低的共同父结点一定在当前结点的左子树中。如果当前结点的值比两个结点都小,则最低的共同父结点一定在当前结点的右子树中。(45)二、三叉链(可以找到父节点):遍历4节

2016-08-25 20:34:59 10059 1

原创 内存字节对齐

上面是你随便 google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则:(在没有#pragma pack宏的情况下,务必看完最后一行)1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要

2016-08-16 16:12:08 349

原创 选择排序及改进方法

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。简单选择排序:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元

2016-08-15 20:05:08 5364 1

原创 read( )函数注意事项与不足

今天在练习使用dup文件描述符重定向时,从标准输入流读取数据时同时练习了read()函数和fgets()函数,因为以前没有过多使用过read()函数,所以出现了一想不到的错误,刚开始调了半天才发现是read()函数的错误。为了防止以后有不熟悉read()函数的同学在使用过程中再出错,所以今天我们来解析一下read()函数。如有不足的地方请大家指出。先说出结果吧:个人觉得循环中最好不要用read

2016-08-13 00:38:35 8199 1

原创 exec函数族实例解析

摘录自《深入浅出Linux工具与编程》(1)exec函数说明fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。),也就是这两个进程做

2016-08-11 21:04:33 1526

转载 HTTP协议的“无连接,无状态”特点

是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。无连接无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,

2016-08-11 20:38:52 714

原创 详解Linux中CentOS6.8下解压安装mysql-5.7.14

环境:centos6.8 32位本教程安装MySQL是通过编译过的二进制文件进行安装。是不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件1、下载 http://dev.mysql.com/downloads/mysql/2、解压缩到/usr/local/下面,mysql的主目录命名为mysql[root@localhost local]# mkdi

2016-08-11 20:04:09 4997 1

原创 函数调用过程原理及栈帧分析

一、栈帧栈帧:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。我们从栈开始来理解什么是栈帧,首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址->低地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低。对x

2016-08-09 22:34:52 2223

原创 sizeof和strlen区别详解

"引自百度百科"strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。sizeof C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来!

2016-08-09 20:46:37 5658

转载 const实现机制及与#define的区别

const与#define的区别(1) 编译器处理方式不同  define宏是在预处理阶段展开。  const常量是编译运行阶段使用。(2) 类型和安全检查不同  define宏没有类型,不做任何类型检查,仅仅是展开。  const常量有具体的类型,在编译阶段会执行类型检查。(3) 存储方式不同  define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存

2016-08-08 17:21:55 2164 2

转载 详解栈区、堆区、全局区、文字常量区、程序代码区

一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变

2016-08-08 17:06:25 19233 4

转载 Linux 内存映射函数 mmap()函数详解

mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。头文件 函数原型void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);int munmap(void* st

2016-08-07 00:01:11 109184 2

原创 端口号及分类

端口号 在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。由于物理端口和逻辑端口

2016-08-06 23:40:03 1804

转载 TCP协议三次握手四次挥手

一、TCP报文格式TCP报文格式图:上图中有几个字段需要重点介绍下:(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:(A)U

2016-08-04 23:19:28 346

原创 CentOs下telnet --安装配置开启

Centos(6.7测试)下telnet的安装与配置一.查看本机是否有安装telnet(全程root下操作)检查是否已经安装telnet   #rpm -qa | grep telnet如果显示结果为:telnet分为telnet-client (简称为telnet)和telnet-server。如果显示第一行证明telnet-client已经安装。第二行显示为

2016-08-04 22:59:32 1363

原创 Linux下安装git

1.CentOs6.5下安装git:在CentOS5的时代,由于yum源中没有git,所以需要预先安装一系列的依赖包。但在CentOS6的yum源中已经有git的版本了,可以直接使用yum源进行安装。$ sudo yum install git但是yum源中安装的git版本是1.7.1,太老了,Github等需要的Git版本最低都不能低于1.7.2 。所以我们一般不用上面的方法

2016-08-04 00:10:10 415

原创 八大排序之堆排序

#pragma oncevoid AdjustDown(int*a,size_t size, size_t parent){ size_t child = parent * 2 + 1; while (child < size) { if (child + 1 a[child]) { child++; } if (a[child]>a[parent]) {

2016-08-02 22:21:13 237

原创 八大排序算法之插入排序

#pragma oncevoid ShellPort(int *a, int size){ for (int gap = size / 2; gap > 0; gap=gap/2) { for (int i = 0; i < gap; i++) { for (int j = i + gap; j < size; j = j + gap) { if (a[j] <

2016-08-02 22:18:48 242

空空如也

空空如也

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

TA关注的人

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