- 博客(71)
- 资源 (4)
- 收藏
- 关注
原创 其实就是一些面试前看的一些内容
CCompany(const CCompany& rhs);~CCompany()const CCompany& operator+=() const;0void Setattr(int a = 1,int b,int c = 0);#define / conststrlen() / strcpy() / strcmp() / strcat() / #include <str...
2018-03-07 22:48:07
245
原创 线程和线程池
先上一段简单封装的Thread Class,其实主要是依靠“std::tr1::bind”和“std::tr1::function”来实现的(主要是c++11和boost的内容),以后再作详细解释为什么这个类要这样写比较合适吧以及程序的优化,比如互斥锁其实可以使用std::lock_guard来管理互斥锁。#include <thread>#include <iostream...
2018-02-18 16:52:23
223
原创 <9> 函 数
函数可以说是C/C++或者其他高级程序设计语言中最重要的概念之一吧。与函数相关的包括普通函数,内联函数,静态成员函数,类的成员函数,模板函数,函数指针,函数调用,友元函数,函数的声明,函数的定义,形参,实参,函数的重载 ··· 一个一个来吧。1 . 普 通 函 数普通函数一般仅仅是为了作为实现某些公式或者功能而封装起来的一段代码。我们把在函数中传递的类型参数叫做形参,传递的实际值叫做实参,形参可有
2018-01-17 17:11:54
282
原创 <8> 智能指针
之前在《Effective C++》中看了一些关于智能指针的内容,今天想在这里结合《C++ Primer Plus》以及自己的一些想法再复习一下,就算是巩固自己的这部分的知识。毕竟智能指针对于C++来说还是挺重要的。1 . 问题的引出,我们先来看下边的一个程序段。void remodel(std::string& str) { std::string* ps = new std::
2018-01-17 13:56:55
296
原创 <7> 深拷贝和浅拷贝
什么是深拷贝?什么又是浅拷贝?我们来看一个问题,当我们设计好了一个类,在函数中对已知的对象进行拷贝,c++会自动调用拷贝构造函数,如果类里边没有自定义的拷贝构造函数,程序则会调用默认的拷贝构造函数。我们来看://----------------------------------------------------------------------------------------
2018-01-16 15:43:31
295
原创 <2> 软件设计模式
虽然说“架构”是大智慧,“设计模式”是小聪明。但是很多时候,我们在代码中体现的小聪明,也能够让程序变得耦合性强,可读性高,复用性好。在本期,我们来一起通过实实在在的代码,学习下几种在软件开发过程中使用的“设计模式”。1 . 单 例 模 式(C++为例)顾名思义,只有一个例子,就是说,在核心的程序里,只有一个被成为单例的特殊类,保证在程序中,应用这种类只有一个对象。因为在某些情况下,我们确实
2018-01-16 11:46:56
236
原创 <1> 软件架构和软件设计、以及MVC
我们在进行软件开发的时候,以前貌似就是类似于“摊大饼”式的软件架构。一个中心,其余的功能模块和逻辑代码就围绕这个主线程(或者主程序)展开,最终随着功能的越来越多,程序越来越繁杂,变得难以维护。慢慢的,MVC于是就随着软件结构设计的发展应运而生,因此,MVC其实就是软件架构模式,并非软件设计模式。1 . 那么,软件架构模式和软件设计模式到底有什么不同呢?其实说白了,软件架构模式是一种战略性的
2018-01-15 20:03:11
770
原创 <6> 面向对象到底有什么(下)?
接着我们上次没有介绍完的内容,我们说OOP的三大特性,还有个特性是“多态”。乍一看,这个名字有点吓人。本篇博客将介绍“多态”是什么?为什么会用到“多态”这个特性?在哪里会用到?等这三个问题,来巩固自己对于面向对象的理解。2.4 “多态”究竟是什么?(C++)“多态”从字面意思上来看是“多种形态”的意思,在我们的面向对象中,多态意味着基类的形态是可以多变的,通过多态可以将基类对象赋予子类的特
2018-01-11 22:17:13
245
原创 <5> 面向对象到底有什么(中)?
在 面向对象到底有社么(上)一文中,我们说了下关于面向对象和面向过程的区别和优劣性。在面向对象里边,也谈了下关于“面向对象三大特性”的其中一个特性“封装性”的简单理解。在这一文中,我们主要一起来了解下关于面向对象的第二个特性“继承”的理解,一起来看下“继承”到底是什么?继承到底有什么作用?以及“继承”在什么情况下会用到?继承的优点在哪里?2.2 ”继承“到底是什么?为什么要有它这个东西?我
2018-01-11 14:03:56
264
原创 <4> 面向对象到底有什么(上)?
我们很多时候在使用高级程序设计语言进行软件开发的时候,必然会遇到”OOP“,”OO“,”面向对象“等字眼。那么这些名词都是什么意思呢,在代码中是如何来体现的呢?我们高级程序设计语言和我们以前遇到的程序设计语言有什么区别呢,优劣势都是什么?我是觉得,了解了这些,就能理清我们现在的工作。(以C++为例)1 . 低级程序设计语言(以C为例)C语言相对于C++其实是低级程序设计语言,我们在使用C语
2018-01-11 11:50:16
207
原创 <12> 各 种 排 序
排序其实是我们在日常的项目开发中,比较常见的操作。比如:按”时间“将”帖子“排序,按”点击量“将”帖子“排序,按”观看数“将”视频“排序,按”分数“将学生的信息进行排序。这些都大量直接使用了排序的算法,或者间接的排序算法,或者是STL自带的算法,或者按照某个标准改良的排序算法等等。因此,了解常见排序算法的执行原理和执行过程,是理解排序的必要的条件。我们可以一起来看看常见的几种排序算法:1 .
2018-01-10 16:04:20
277
原创 <7> git stash
假设我现在正在修改我的代码,但是临时接到一个任务,需要对于现有的目前代码里某个bug进行修复,我可能修改了很多代码,不能删减提交,因此这个时候,我就需要将我修改的代码”暂存起来“,git提供了这样的功能,将工作现场储藏起来,等以后恢复现场之后,再继续工作。比如:我现在正在修改我的文件Test.txt,还没修改结束,如下:使用”git stash“功能,将当前的工作区”储藏“起来,等
2018-01-09 16:42:29
230
原创 <6> Git的冲突
Git固然好,也是有问题出现的。比如”冲突问题“就是Git出现的比较多的问题之一,我们本次来模拟一下这个问题是怎么出现的,又是怎么解决的。1 . 创建一个新的分支,名称叫做”bug“,并切换到”bug“分支。接着,我们在bug分支上对于Test.txt的第四行进行了修改,把”Sun“改为”Sunny“,然后执行”git add .“、”git commit -m“,并切换回”mas
2018-01-09 16:22:00
213
原创 <5> Git的分支管理
Git的分支管理是让很多开发者来跟踪自己的项目的原因之一。当你提交的时候,git都会把文件串成一条时间线,这条时间线就是一个分支,也是最重要的分支,我们叫做master(主分支)。HEAD严格来说,并不是指向提交的,而是指向master的,master才是指向提交的。一开始的时候,master分支是一条线,git使用master指向最新的提交,在用HEAD指向master,就能确定当前分支,以及当
2018-01-09 15:30:17
296
原创 <4> 远程仓库
Git是分布式的版本控制系统,同一个Git仓库,可以分布到不同的机器上,最初,肯定是有一个最原始的版本库。之后的话,我们可以在不同的计算机上克隆这个最原始的版本库,每台计算机的仓库都是一样的,没有什么主次之分。所以,真实的情况是这样的,用一台计算机来充当”中央服务器“的角色,7 X 24 不关机,其他的每个人都从个这个计算机上克隆代码,或者推送代码。假设现在有了Git服务器···第一件事情:生
2018-01-09 14:52:02
215
原创 <3> git的一些介绍(中3)
1)这篇,我们来聊聊关于工作区和暂存区、以及文件的一些命令操作。仓库的工作区指的是除了.git文件夹的其他目录。.git文件夹也是版本库。版本库存了很多内容,其中最重要的就是stage(或者叫index)的暂存区,以及git为我们自动创建的第一个分支master,以及指向master的指针叫做“HEAD”。其实,文件添加到git版本库的时候,是分两步执行的,第一步是用git add把文
2018-01-09 14:27:46
214
原创 <3> git的一些介绍(中2)
1 . 本地的版本控制”本地“指的是在你计算机上的仓库,”远程“指的是除了你的计算机之外的仓库(但是我们一般指的是充当”中央服务器“的计算机)。本地的仓库和远程的仓库可能是不一样的,因为你在你的本地或许放了一些没有被”git add“(参看git的一些介绍(中1))的文件或者文件夹,或许为了达到某种测试目的新建了自己的临时分支(分支的概念是git相对比较重要的,在之后的博文里我们继续聊聊看,也
2018-01-09 13:49:50
223
原创 <2> git的一些介绍(中1)
1 . Git的安装我们在使用Git之前,需要对Git进行安装,这是下载地址(https://git-scm.com/downloads),Git是开源的、免费的。整个安装过程并无特别需要注意的地方,只是在安装的时候,根据自己得需要进行选择是否安装(Git Gui、Git Bash等),建议还是装上吧。(注:我的电脑是Window)当安装成功后,右键后,可以看见:2 . Git
2018-01-09 11:04:33
198
原创 <1> 版本控制系统
1 . 版本控制系统版本控制系统是一种记录若干文件内容变化,便于将来修订特定版本或者还原部分文件的系统。在日常的软件开发中,采用版本控制系统来管理的话,可以将项目回溯到之前的某个状态,可以对比文件的变化细节,查找出哪个工程师在哪个时间节点修改了哪些内容,或者是哪个工程师在提交代码后,解决了哪些问题。2 . 版本控制系统都有哪些?一般有两种:集中式的版本控制系统(SVN、CVS等)、分布
2018-01-09 09:22:04
269
原创 <11> 继续动态规划(DP)
我发现动态规划这类问题有一个特点:”大问题依赖于某些小问题“。我倒觉得这种思想对于处理一些比较大的,一眼较难看出的问题比较合适的方式,但是通过分析之后,发现可以将大问题归结为小问题的解决,这些小问题环环相扣,直到问题被完全分解。· 1个问题:台阶问题,有个人正在上楼梯,楼梯有N个台阶,他可以一次性上1阶,2阶级,3阶级,那么计算他有多少种上楼梯的方式。分析:我们来看,这种问题乍一看貌似没什
2018-01-08 14:54:28
257
原创 <10> 递归与DP
"我感觉我自己对于递归的理解是我自己对于递归的理解”,或许这就是递归的含义吧,但是比较遗憾的是,我的这句话没有终止条件,也就是说,这句话一旦被执行,将会永远的执行下去。我的递归能力,自认为感觉不是很好,原因估计是递归有“层”的概念,需要你在写代码还是阅读代码、或者是debug的时候,脑海中深入到函数的下一层,下下一层···中考虑函数的执行过程究竟是什么。简单的递归比较好理解,但是稍微复杂的递归就有
2018-01-08 13:35:43
994
原创 <9> 素数
我感觉素数这一块也是比较重要的,尤其是在密码学、网络安全、身份验证等这一块。素数(也叫质数)是我们在小学?或者初中吧···学到的一个数学名词,含义是“只能被1和本身整除”。因此,这个概念可以被用来判断一个数字是不是素数,或者打印素数。(并且我们知道小于2的数字,都不是素数)#include #include #include #include // 素性测试bool isP
2018-01-08 09:25:29
346
原创 <9> 位操作知多少
1. 按位运算符能够针对数字的每一位进行操作,数据操作的背后是按照2进制的方式进行的。2. 截至目前,在C++中,按位运算符一共有6个(>、&、|、^、~)按位运算符号的用法1) >表达式:数值 左移操作符我们知道的是,二进制的每一位越往左,越大,,空出来的位置用0补上。·以13(10进制)为例,13(10进制)所对应的2进制为“0000000000001101”,左移3位
2018-01-05 11:39:09
263
原创 <8> 单向循环链表在一些场景下的应用
我们经常会碰到类似“约瑟夫环”的问题,这类环类问题,一般可以使用单向循环链表来使用。#include #include typedef struct Person{ int ID; Person *next;}m_Person;m_Person* CreateLinkedList(int number,int *array) { m_Person *
2018-01-04 15:56:05
477
原创 <8> 其实,队列也可以这么来替代。
两个栈来代替一个队列,一个栈正常存储数据,另一个栈在执行top()时候存储“从第一个栈中去取出来的数据”,并将第二个栈的顶端数据弹出即可。#include #include #include #include //----------------------------------------------------------------------------------
2018-01-04 15:49:37
311
原创 <7> 队列的各种操作
队列和栈一样,也是相对比较常见的数据结构。队列遵守的是“先进先出”的原则,因此在一些数据先到先处理的场景,可能会用到。下边使用C/C++编写了队列的自定义实现,其中包括创建、出队列,入队列、取值等。#include #include #include #include //------------------------------------------------------
2018-01-04 14:40:50
275
原创 <6> 栈的各种操作
栈是一种数据结构,“先进后出”是它的特点。#include #include #include #include //------------------------------------------------------------------------------------------------------------------//---------------
2018-01-04 13:45:57
197
原创 <3> Effective C++阅读
前段时间,阅读了《Effective C++》,深深地被作者深入浅出的介绍关于C++应该注意的地方所折服,在日常工作中,非常具有警示和指导意义。先将其中的几条条例摘抄下来,然后阐述下自己的理解,或者结合项目,聊聊自己的看法。1 视C++为一个语言联邦 c++的编程高效编程守视状况而变化,取决于你用C++的哪一部分。2 尽量以const、enum、inline、替换#
2017-12-12 19:25:09
203
原创 <5> 一些关于链表的练习
1 . 给定两个已经排序好的表L1,L2,只用基本的表操作编写计算L1∩L2的过程。std::vector interse(LinkList *l1, LinkList *l2){ std::vector Temp; for (size_t i = 0; l1!=NULL; i++) { if (Find4(l2, l1->_age)) { Temp.push_ba
2017-11-10 15:06:06
279
原创 <4> 头结点、头指针、和首元结点
1 . 概念头结点:在我看来,头结点其实是为了脱离整个数据链表,能轻易的找到首元结点、操作首元结点而设置的一个结点。头指针:头指针是一个指针,指向的是头结点,也就意味着头指针里储存着头结点的地址。首元结点:包含有数据的第一个结点。2 . 区别头结点:从上图看出,头结点的数据域里是没有数据的,它的指针域指向的是首元结点。头指针:仅仅是一个指向头结点的指针,为了方便操作
2017-11-09 09:11:11
1894
原创 <3> 单链表的各种操作(创建、增加、删除、修改、查找、逆序、判空、置空等)
1 . 链表的创建1)首先声明三个结构体指针变量(head、p1、p2),其中,一个是头结点,剩余的两个用来连接。2)给p1开辟内存空间,代表第一个结点的地址,并且给第一个结点的数据域中的数据赋值。3)循环创建(假设有N个结点需要创建)的过程。需要分情况,当我们的头结点并没有被连接到任何创建的结点上时,需要将head连接到,同时需要将p2也指向p1,这是因为当我们在将head连
2017-09-30 14:46:18
2048
原创 <2> 数组和链表的一般介绍
1 . 数组是什么?数组是具有某种相同特征的对象的集合。比如:int a[10]是一个存放10个整型数字的集合,double a[10]是一个存放10个双精度数字的集合等。数组其实是一个数据结构,因为当我们在声明并定义一个数组的时候,程序就会在内存中为我们申请一个连续的N*(sizeof ( type ))大小的空间。1 . 1 存放的位置栈:我们在函数(方法)中定义一个变量的时候,程
2017-09-29 16:45:42
370
原创 <1> 程序的复杂性分析
1 . 什么是程序的复杂性?我们在写某些算法、或者某些程序片段的时候应该在Coding之前对自己的代码需要有一定的预估。比如我们如果写个排序被执行了“1”年,或者我们的代码最终生成的可执行文件超过了1G,相信任何一个产品经理都会直接恼火。所以,程序的复杂性在我理解,就是程序(算法、逻辑代码等)在空间资源和时间资源两个方面的消耗程度。2 . 四个数学定义··· 定义1:如果存在常数c和n
2017-09-25 14:38:28
2796
原创 <2> 有限时间内,计算一个尽可能大的素数
1 . 问题点: “ 有限时间 ”、“ 尽可能大”、“ 素数 ”“素数“ :需要经过素性测试合格后的数字“有限时间”:测试一个数字,可接受的时间内,并非无穷尽的依靠暴力求解“尽可能大”:可检测数的上限2 . 问题点求解2 . 1 “ 素 数 ”1) 概 念: 大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数称为质数, 素数有无限个。 2) 素
2017-09-22 15:57:11
3209
原创 <1> 可视化排序
1. 简 要 概 述 VisualSort 是一种排序教学演示程序,演示程序使用 C++ / WinForm( .Net )语言开发,开发平台为 Microsoft Visual Studio2015 Community。演示程序实现了对任意交换排序算法的每一步比较和交换的可视化演示,并支持单步模式,可以执行单步的前进/回退操作。2. 软 件 操 作 2.1 软件的基本介绍如下
2017-09-22 15:32:05
625
原创 <2> 内存四区和函数的调用模型
1 . 内存四区1 . 1 内存四区图如下图,这是操作系统在执行程序时的分配内存情况,内存管理将内存分为四个部分:堆、栈、数据区域、代码区域。 当编译器执行代码的时候,首先是从硬盘中将代码加载到内存中,然后操作系统将代码分为4个部分:堆、栈、数据区域、代码区域。 堆:由程序员动态分配内存,并且手动释放。如果程序员不进行手动释放的操作,这部分可能被操作系统回收。(malloc
2017-09-22 13:49:39
258
原创 <1> C/C++的一些基本介绍
1 . 数据类型1 . 1 为什么要有数据类型这个东西?因为我们在编程的过程中可能需要对于日常的事物进行量的表达,从而使计算、逻辑操作更为方便。比如:人数(int,10名)、时间(double,0.5分钟)、文件名(string,“test.txt”)。对于人数,我们可以进行增量操作,时间可以换算成秒,文件名可以进行截取得到文件类型。1 . 2 数据类型的本质是什么?我感觉。数
2017-09-22 10:48:29
381
原创 <NOIP> 29 . P2089 烤鸡
题解:这是洛谷的第29道题目,我这的代码好若鸡。源代码:#include #include #include #include using namespace std;int main(){ bool flag = false; int iCounter = 0; int number,sum = 0; int *a = new int[10
2017-07-04 23:34:02
435
原创 <NOIP> 28 . P1579 哥德巴赫猜想(升级版)
题解:这是洛谷的第28道题目,直接暴力计算、输出即可。注意1 . 首先还是对因子进行素性测试(这样会减少很多不必要的步骤)2 . 然后按照等式筛选素数源代码:#include #include #include #include using namespace std;#define DATA_TYPE unsigned long longDATA_T
2017-07-04 23:30:46
649
原创 <NOIP> 27 . P1618 三连击(升级版)
题解:这道题是洛谷的第27道题目,我是感觉不需要递归全排列,依旧是暴力即可。源代码:#include #include #include using namespace std;#include #include using namespace std;bool check(int *first, int *second){ if (first[0] !=
2017-07-04 23:28:43
390
可视化排序
2017-09-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人