- 博客(40)
- 收藏
- 关注
原创 设计模式(2)
观察者模式: Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。 Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同include include include using namespace std;class Assist; // 抽象观察者
2018-01-27 22:11:22
166
原创 设计模式(1)
单例模式:保证为一个类只生成唯一的实例对象。也就是说在整个程序空间中该类只存在一个实例对象。> #include using namespace std;class UserManager{private: UserManager() { }public: static UserManager* GetInstance() {
2018-01-27 21:51:05
188
1
原创 STL标准模块:算法
算法的概述 算法部分主要由头文件,和组成。 是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、反转、排序、合并等等。 体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。 中则定义了一些模板类,用以声明函数对象。 STL提供了大量实现算法的模版函数,只要我们熟悉了STL之后,许多代码可以被大大的化简,
2018-01-26 21:02:52
358
原创 STL标准模块:stack,queue,list,priority_queue
stack: 简介:stack是堆栈容器,是一种“先进后出”的容器。 stack是简单地装饰deque容器而成为另外的一种容器。 # include stack对象的默认构造: stack采用模板类实现, stack对象的默认构造形式: stack stkT; stack stkInt; //一个存放int的stack容器。 stack stkFloa
2018-01-26 20:49:33
221
原创 STL标准模块库:vetcor和deque
vectorvector的容器简介: vector是将元素置于一个动态数组中加以管理的容器。 vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。 vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时vector对象的默认构造: vector采用模板类实现,vector对象的默认构造形式 vector vecT; v
2018-01-25 21:10:55
185
原创 STL标准模块库:容器string模块
STL概述 基本概念: STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类
2018-01-25 20:53:19
219
原创 异常与文件操作
类型转换 static_cast 普通数据类型之间的转换 reinterpret_cast 指针之间的转换 dynamic_cast 类层次之间的转换 const_cast 将一个 const常量 转化为非 const 变量异常处理机制 什么是异常? 1)异常是一种程序控制机制,与函数机制独立和互补 函数是一种以栈结
2018-01-24 15:47:34
215
原创 函数模版和类模版
概述: C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。1)C++提供两种模板机制:函
2018-01-20 14:47:28
123
原创 多态
多态: 多态成立的三个条件 1:要有继承; 2:要有虚函数重写; 3:用父类指针(父类引用)指向子类对象。静态联翩编和 动态联编 1、联编是指一个程序模块、代码之间互相关联的过程。 2、静态联编(static binding),是程序的匹配、连接在编译阶段实现,也称为早期匹配。 重载函数使用静态联编。 3、动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编(迟绑定
2018-01-20 14:31:02
150
原创 继承与派生
类之间的关系: has-A: 包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类. use-A 一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。 is-A 机制称为“继承”。关系具有传递性,不具有对称性。继承的关系: 继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界
2018-01-16 19:18:02
346
原创 字符串的重载程序
MyString.h#ifndef __MYSTRING_H__#define __MYSTRING_H__#include using namespace std;class MyString{ // 重载 friend std::ostream& operatorout, MyString &str); // 重载 >> 操作符 frie
2018-01-14 19:47:11
330
原创 运算符重载
概念: 所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。 运算符重载的限制: 不能重载的是. :: .* ?: sizeof其余基本上都可以 重载运算符可以对运算符做出新的解释,但原有的基本语义不变: 不改变运算符的优先级, 不改变运算符的结合性; 不改变运算符所需要的
2018-01-14 19:39:29
137
原创 类和对象
面向对象编程介绍 C++面向对象程序设计 面向将系统看成通过交互作用来完成特定功能的对象的集合,没个对象用自己的方法来管理数据,也就是说对象内部的代码能够操作对象内部的数据 面向对象的优点: 由活字印刷谈面向对象; 面向对象的好处 面向过程的缺点: 不容易维护,灵活性差,不容易扩展,更谈不上复用,由于客户的需求多变,导致程序员加班加点,甚至整个项目经常返工。 面向对象的优
2018-01-09 19:28:54
129
原创 C到C++的拓展
C++的引用:变量名的回顾:变量名实质上是一段连续存储空间的别名,是一个标号(门牌号) 程序中通过变量来申请并命名内存空间 通过变量的名字可以使用存储空间C++中的引用:#include int main(){ // 定义一个int型变量a,在内存中占4个字节, // 变量名 a 就代表了这一块内存,或者说 a 是这块内存的别名 int
2018-01-08 19:16:02
152
原创 C 语言到 C++ 过度
C语言和C++ 的区别: C语言存在很多的灰色地带,没有深思熟虑的设计过程,残留量过多低级语言的特征例如直接利用指针进行内存操作,C语言的目标就是高效。 C语言是面向过程编程设计:数据结构和算法, 问题的存在 软件可重用性差,软件可维护性差,构建的软件无法满足用户需求。C++面向对象程序设计:由现实世界建立软件模型; 特点:直接分析用户需求中设计的各个实体,在代码中描述现实世界中的实体
2018-01-05 19:55:09
289
原创 Linux网络编程1
TCP、IP理论基础 协议栈 Linux的优点之一就是在于它丰富而稳定的网络协议栈,其范围是从协议无关层(如通用的socket层接口和设备层)到各种网络协议的实现; 对于网络理论介绍一般采用OSI模型,但是Linux中网络栈的介绍一般分为四层的Internet模型TCP/IP协议族 TCP/IP 实际上一个协同工作的通信家族,为网络数据通信提供通路。为讨论方便可TCP/IP 协议组大体上分为
2017-12-10 13:24:23
135
原创 Linux多线程编程———重点区分
多线程 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程.现在,多线程技术已经被许多操作系统所支持,包括Windows/NT、Linux。进程 进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的
2017-12-09 18:19:07
164
原创 Linux进程间通信2
共享内存 是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容 共享内存实现分为两个步骤: 一、创建共享内存,使用shmget函数 二、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数 当一个进程不再需
2017-12-07 10:59:45
152
原创 Linux进程间通信1
进程间通信概述 目的: 1.数据传输 一个进程需要将它的数据发送给另一个进程 2.资源共享 多个进程之间共享同样的资源 3.通知事件 一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件 4.进程控制 有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变 发展
2017-12-07 10:50:46
116
原创 Linux进程控制编程
一 进程控制理论基础 进程的状态: 进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元; 程序是放到磁盘的可执行文件; 进程是指程序执行的实例;进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制 进程是暂时的,程序使长久的:进程是一个状态变化的过程,程序可长久保存 进程
2017-12-06 18:35:35
145
原创 Linux文件编程
所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态),它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。系统
2017-12-04 22:19:44
121
原创 栈的应用——计算器的四则运算
计算器即是四则运算法则: 我们用的是后缀表达式又称逆波兰的方法实现的,例如我们来求9+(3-1)X3+10/2 后缀表达式为931-3*+102/+ 规则是从左往右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号就将处于栈顶两个数字出栈,进行运算,一直到最终获得结果。#include <stdio.h>#include <stdlib.h>#define OK 10000001
2017-12-04 20:35:47
1125
1
原创 杨辉三角如何实现
#ifndef _SEQUEUE_H_#define _SEQUEUE_H_#define MAXSIZE 1000#define FAILURE 100001#define SUCCESS 100002typedef int ElemType;struct queue{ElemType data[MAXSIZE];int fro
2017-12-04 14:54:46
241
原创 队列的顺序结构和链式结构定义
队列的顺序结构:SeQueue.h#ifndef _SEQUEUE_H_#define _SEQUEUE_H_#define MAXSIZE 1000#define FAILURE 100001#define SUCCESS 100002typedef int ElemType;struct queue{ElemType da
2017-12-04 14:04:51
683
原创 栈的应用 ——计算器
计算器即是四则运算法则:我们用的是后缀表达式又称逆波兰的方法实现的,例如我们来求9+(3-1)X3+10/2后缀表达式为931-3*+102/+规则是从左往右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号就将处于栈顶两个数字出栈,进行运算,一直到最终获得结果。#include #include #define OK 10000001#def
2017-12-04 13:38:25
292
原创 栈的数据类型定义
LinkStack.h:#ifndef _LINKSTACK_H_#define _LINKSTACK_H_#define SUCCESS 1000001#define FAILURE 1000002typedef int ElemType;struct node{ElemType data;struct node *next;};
2017-12-04 11:53:43
2858
原创 数据结构:顺序结构和链式结构的数据类型定义
顺序结构:头文件声明:sequenclist.h#ifndef _SEQUENCE_H_#define _SEQUENCE_H_#define MAXSIZE 10#define FAILURE 1000000#define SUCCESS 1000001#define TRUE 1000002#define FALSE
2017-12-04 10:39:36
642
原创 经典的几种排序方式
所谓排序就是整理文件中的记录,使之按关键字递增(或递减)次序排列起来。 稳定排序与不稳定排序: 假设 Ki = Kj ,且排序前序列中 Ri 领先于 Rj ; 若在排序后的序列中 Ri 仍领先于 Rj ,则称排序方法是稳定的。 若在排序后的序列中 Rj 仍领先于 Ri ,则称排序方法是不稳定的。 例:序列 3 15 8 8 6 9若排序后得 3
2017-12-02 10:40:18
3424
原创 一些经典的面试题
1、sizeof和strlen有哪些区别? 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。 4.数组做sizeof的参数不退化,传递
2017-11-30 15:58:55
111
原创 典型题目
5编程实现查找两个字符串的最大公共子串示例:"aocdfe"和"pmcdfa"最大公共子串为"cfd" #include #include int main(){char str1[20] = {0};char str2[20] = {0};printf("Please input two strings:\n");scanf("%s%s",str
2017-11-29 22:10:37
228
原创 经典题型
题目:编程实现查找两个字符串的最大公共子串 示例:”aocdfe”和”pmcdfa”最大公共子串为”cfd”#include #include int main(){ char str1[20] = {0}; char str2[20] = {0}; printf("Please input two strings:\n"); scanf(
2017-11-29 22:07:31
140
原创 典型的程序员面试题
1、一般赋值语句的概念和方法。求下程序输出:#include int main() { int x, y = 3, z = 4; x = (y = z); printf("x = %d\n", x); x = 4; x = (y == z); printf("x = %d\n", x); x = 1 x = (y | z);
2017-11-29 22:00:03
3266
原创 很容易弄混淆的知识点
1.简述Makefile的作用 makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是–“自动
2017-11-20 16:56:10
437
原创 数据结构1
一 线性表: 线性表的定义 定义n个数据元素的有限序列,记作(a1, a2, …, an)ai 是表中数据元素,n 是表长度 线性表的特点 除第一个元素外,其他每一个元素有一个且仅有一个 直接前驱。 除最后一个元素外其他每一个元素有一个且仅有一个 直接后继。二 顺序表: 顺序表的定义和特点 定义 将线性表中的元素相继存放在一个连续的存储
2017-11-20 16:53:23
115
原创 结构体的认识与深入解析
结构体 声明一个结构体类型的一般形式为: struct 结构体名 {成员表列} 定义结构体类型变量: (1)先声明结构体类型再定义变量名 例如:struct student student1, student2;(2)在声明类型的同时定义变量 这种形式的定义的一般形式为: struct 结构体名 {
2017-11-16 14:09:38
531
原创 c语言入门的简单题型
1题目:编写程序,实现strcmp()相同功能myStrcmp()函数include define N 20define error -1int myStrcmp(char *a,char *b) { if(a == NULL || b == NULL) { return error; }int flag;while (*a !='\0' && *
2017-11-16 14:00:13
310
原创 C语言基础与提高之指针
指针: 1.指针是什么?起什么作用? 指针是变量的一种,里面是一个地址,通过这个地址找到要找的数据。 实质:单元的地址就是指针内容; 2. 指针运算符 &是取地址的运算符,*是表示指针运算符 例: int *p1,a ; p1=&a; *p1 =3; 3.指针作函数参数 函数的参数不仅可以是整型、实型、字符型等数据,还可以
2017-11-13 20:23:55
163
原创 C语言的基础与提高
数组 一维数组: 1.一维数组的定义格式为: 类型说明符 数组名[常量表达式]; 例如: int a[10]; 它表示定义了一个整形数组,数组名为a,有10个元素。 2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。 3.常量表达式中可以包括常量和符号常量,但不能包含变量。 注意: C语言不允许对数组的大小作动态定义,即数组的大小不
2017-11-10 14:49:47
252
原创 Linux的常用工具
一 vi编辑器 vi有3个模式:插入模式、命令模式、低行模式。 插入模式:在此模式下可以输入字符,按ESC将回到命令模式。 命令模式:可以移动光标、删除字符等。 低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。常用的几种设置(vim /etc/vimrc) 配置颜色 syntax on 设置鼠标 set mouse 自动缩进 set auto
2017-11-08 16:42:40
223
原创 Linux初识
与Linux的相遇Linux的出现让我对这个科技世界有个更多的期待和向往。 Linux,是一种用于C语言开发的重要操作系统,由于它有更好的开源方式,让大家拥有更多的资源,得到更多的信息,对软件工具的发展起到了更大的促进作用。 这使我对于Linux的学习有了更多的兴趣爱好。我相信掌握了Linux的操作系统,在以后的编程方面有更多的方便。 今天首先对Linux的操作系统有了初步的认识,在面对一个陌
2017-11-06 13:07:10
162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人