自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 面试常考8种排序算法的总结

(1)插入排序 直接插入排序是一种较简单的排序方法; 算法思想: 将一个记录插入到已排好的有序表中,从而得到一个新的记录数加一的有序表; 示例:{3,45,66,97,1,6,65} 初始关键字 : (3) 45 66 97 1 6 65 i=2: (45) (3 45) 66 97 1 6

2017-08-25 23:04:01 1250

原创 对于拷贝构造函数和赋值运算符的理解

最近在做笔试题的时候,遇到了这个关于拷贝构造函数和赋值运算符的调用的问题,感觉挺容易混淆的,所以在这总结一下。 在程序员没有自己定义拷贝构造函数时,默认拷贝构造函数和赋值运算符默认的进行的是浅拷贝。 1、拷贝构造函数 函数原型:class_name (const class_name &); 函数调用情况(): (1)新建一个对象; (2)使用同类的已有对象对其进行初始

2017-08-24 15:39:47 1475 2

原创 深入浅出深拷贝和浅拷贝

深拷贝(值拷贝)和浅拷贝(位拷贝)的区别 浅拷贝:就是对指针的拷贝,拷贝完成后,两个指针指向同一块内存地址空间; 深拷贝:不但是对指针的拷贝,而且对指针指向的内容进行拷贝, 拷贝完成之后的两个指针指向两块不同的内存空间。 浅拷贝容易出现的问题: (1)浅拷贝只是对类中的简单数据成员进行赋值,当类的成员变量存在指针成员时,就会出现问题。 (2)在浅拷贝中由于obj1

2017-08-24 15:17:34 514

原创 线程间同步机制的总结

多线程共享同一个进程的地址空间 优点:线程间较容易实现通信,通过全局变量实现数据共享和交换, 缺点:多个线程同时访问共享资源容易出现资源竞争,所以要引入同步和互斥机制。线程间同步:无名信号量,互斥锁,事件,临界区;(后两个用的较少) 无名信号量:实现同步的机制步骤 (1)定义全局变量sem_t sem1,sem2; (2)在进程中

2017-08-22 10:19:34 955

原创 堆(heap)和栈(stack)的区别

在 C/C++里面的程序由5个区组成:栈区,堆区,全局区,文字常量区,程序代码区; (1)栈的地址空间向低地址方向生长,堆的地址空间向高地址方向生长; 生长方向:就是存放变量的地址由大到小还是由小到大; 下面程序是测试栈和堆的生长方向;#include <iostream>using namespace std;int main(){ int m=1 , n=2

2017-08-21 14:51:51 319

原创 内联函数、宏函数、普通函数的区别

内联函数:inline 函数类型 函数名 (函数入参) 定义:用修饰符inline修饰的函数称为内联函数。 和普通函数的定义和声明相同。和普通函数相同会做类型检查,安全。 在编译的过程中,不是跳转到内联函数定义的地方去,而是将内联函数里面的代码拷贝到调用的地方去执行(嵌套到目标代码的调用的位置),节省时间,但是却增加了目标代码的代码量(牺牲了代码的存储空间,节省了运行时间)。

2017-08-21 11:39:40 350

转载 结构在内存中是如何存储的

一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一:                                      #include                                       using namespace std;

2017-08-13 16:43:14 424

原创 析构函数和构造函数的注意事项

1构造函数:在C++中,使用构造函数来实现对象的初始化。 构造函数的特点: (1)构造函数无需调用,建立对象时自动执行。 (2)构造函数的名称必须与类名相同,不能随意起名(不同以初始化函数,虽然和其功能相同); (3)构造函数没有返回值。 (4)如果程序者没有自定义构造函数,系统会自动调用默认的构造函数。 (5)如果程序者自己定义了构造函数,则系统会调用定义的构造函

2017-08-12 15:25:08 2115

原创 对于虚析构函数的理解

首先,对于虚析构函数,那就得说下构造函数和析构函数了。构造函数:进行初始化成员变量的函数。析构函数:在对象生命周期结束的时候,完成资源的回收和清理。对于虚析构,就是在析构函数前加virtual关键字,那么到底有什么作用呢?   防止内存泄露,定义一个基类的指针p,在delete p时,如果基类的析构函数是虚函数,这时只会看p所赋值的对象,如果p赋值的对象是派生类的对象,就会调用派生

2017-08-06 16:09:00 25341 6

原创 对于函数重载-函数覆盖-函数隐藏的区别

1 函数重载(在一个作用域下) 定义: 函数名相同,函数入参不同(1 函数入参的个数不同,2 数据类型不同 3 参数顺序),也就是面向对象程序设计的多态性的实现,就是指同一个函数名可以实现不同的功能。 注意: 函数返回值无法实现函数重载,因为在调用函数的时候可以选择接收或者丢弃返回值,所以编译系统无法判断你是调用有返回值的函数然后丢弃返回值,还是调用没有返回值的 函数。所以 ,函数返回

2017-08-05 14:31:11 495

转载 volatile关键字以及C语言的其它31个关键字

2017年8.3日,总结一下volatile 这个关键字,顺便复习一下C语言中的 32个关键字。 volatile:说明变量在程序执行中可被隐式的改变。易变的,稳定的,用来声明那些可能在你的程序本身不知道的情况下会发生改变的常量。 作用:避免被编译器优化。 对于一般变量,当读取它的值的时候,为了提高存取速度,优化器会把变量先读取到一个寄存器中;以后再取变量的值时候,直

2017-08-03 20:05:31 613

转载 静态变量,局部变量,全局变量的区别

转自http://blog.csdn.net/w825828482/article/details/20526145(1)局部变量       在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外时不能使用这些变量的,它们称为局部变量.   1.主函数main中定义的变量也只在主函数中有效,而不因为在主函数中定义而在整个文件或程序

2017-08-01 20:13:38 471

原创 C++中,自定义string类,实现字符串的赋值“=”和连接函数“+”

对于在C语言中,我们使用指针可以轻而易举的实现字符串的拷贝和连接等,在C++中,C在里面是完全兼容的,所以我们就可以在这里大展伸手,开始我们的C++的学习之旅,这篇文章我们实现自定义一个string类,实现字符串的赋值和连接,也就是C++里所谓的运算符重载;运算符重载是使用函数实现的,我们应该遵循函数的一些规则。 这里我说一下对于为什么进行运算符重载?我个人来看,大部分的运算符只适用于基本的数

2017-07-30 17:12:44 8305 1

原创 网络编程下关于服务器模型的总结

LINUX下关于服务器模型的总结 服务器分为1:循环服务器 2:并发服务器 循环服务器:在同一时刻只能响应一个客户端的请求。 并发服务器:在同一时刻可以响应多个客户端的请求。在循环服务器中,分为TCP服务器和 UDP服务器,循环服务器一般很少使用。 在并发服务器中,一般有多进程并发服务器,多线程服务器,IO多路复用并发服务器。 (1)多进程的

2017-07-22 14:32:02 335

转载 UDP调用connect()作用

我们都知道,UDP是无连接的,但是为什么协议让UDP也可以调用connect()? 1.因为UDP可以是一对一,多对一,一对多,或者多对多的通信,所以每次调用sendto()/recvfrom()时都必须指定目标IP和端口号。通过调用connect()建立一个端到端的连接,就可以和TCP一样使用send()/recv()传递数据,而不需要每次都指定目标IP和端口号。但是它和TCP不同的是它没有三次

2017-07-21 12:52:18 720

原创 LINUX下如何创建TCP客户端和服务器,实现通信

TCP的客户端和服务器的创建1.socket是属于LINUX下的进程间通信的一种方式BSD,(socket)套接字。 既可以实现同一台主机间的进程间通信,也可以实现不同主机间的进程间通信, 也是操作系统给应用程序提供的用于网络通信的接口。 在Linux下,由于一切皆文件,所以socket也是一种文件。可以通过文件描述符去操作。 2.IP号:主机的唯一标识。

2017-07-19 10:26:10 7235 4

原创 多线程的共享资源的解决方案

线程:是轻量级的进程,也是程序执行的最小单位。 线程的特点:共享进程的内存空间,对于操作系统而言,进程和线程都会参与系统的统一调度,同样用task_struct来描述线程。 注意事项:由于多线程是通过第三方的线程库来实现的,所以在LINUX 的gcc 编译器下要这样编译,如要编译thread1.c这个文件,命令如下:gcc thread1.c -o thread1 -lpthread 后面-lp

2017-07-16 21:35:43 922

原创 linux下如何创建守护进程

1,进程的概念:程序的一次动态执行过程。            进程存在于内存当中,存在着  创建,调度,执行和消亡,进程号是进程的唯一标志,每一个进程都有自己独立的内存空间,在32位操作系统中,进程拥有0-4G的内存空间,其中0-3G属于用户,3G-4G属于内核,所以就出现了进程的执行模式:用户模式和内核模式。          2,进程的类型:交互进程,批处理进程,守护进程

2017-07-16 17:13:40 654

原创 使用共享内存实现进程间通信 -使用信号实现同步

今天,给大家来在父子间使用共享内存实现通信,使用信号实现同步。   1. 进程的创建       1)对于进程的创建,使用的函数为fork();         函数原型为pid_t fork(void);         即可在父进程中创建子进程  头文件:#include <sys/types.h>       #include <unistd.h>        返回值

2017-07-16 16:06:30 3807 1

原创 使用共享实现两个进程之间的聊天-使用有名信号量实现同步

1.共享内存,它是LINUX下,属于SYSTEM V IPC对象的一种通信方式。   1)共享内存是一种尤为高效的进程间通信方式,进程直接进行读写操作,不需要任何数据的COPY。   2)内核中专门留出了一块内存区,进程间交互信息时,只需要将其映射到自己的私有地址空间。       3)进程之间由于是共享内存,因此也需要一种同步机制,如信号量,和互斥锁等。   2.创建一个共享内存的

2017-07-16 15:05:44 2772 5

原创 指针函数的局部变量

#include <stdio.h>#include <string.h>char * mystr();int main(){ printf("%s\n",mystr()); return 0;}char * mystr(){ char s[20]; strcpy(s,"hello"); return s;}> 解决方法1:将局部变量设置为全局变量

2017-05-09 22:28:45 373

关于QT的设计模式

一本设计模式,你值得拥有

2017-08-18

空空如也

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

TA关注的人

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