![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 63
朱传林
每个不曾起舞的日子,都是对生命的辜负!
展开
-
C/C++语言中关于const用法的总结
原文:http://blog.csdn.net/liyuefeilong/article/details/48900121一. const的基本功能与用法1.将限定符声明为只读使用方法如下,在类型前/后加上关键字const,该变量必须被初始化,否则编译错误;该变量不能被重新赋值,否则也编译错误。 举例:const int i = 50; // 编译正确cons转载 2015-11-05 08:11:08 · 794 阅读 · 0 评论 -
设计模式之一简单工厂模式
根据用户需求实例化不同对象。//simple factory model#includeusing namespace std;//用一个单独的类来做这个创造实例的过程,即工厂class Operation{public: Operation() { number1=0; number2=0; result=0; } Operation(int one原创 2015-08-25 20:26:36 · 749 阅读 · 0 评论 -
设计模式之六模板方法模式
#includeusing namespace std;//把所有公共操作都提取到基类实现,具体操作由子类完成class AbstractClass{public: virtual ~AbstractClass() { //基类要有虚析构函数 } void templateMethod() { PrimitiveOperation1(); PrimitiveO原创 2015-08-26 15:55:40 · 501 阅读 · 0 评论 -
设计模式之四代理模式
//代理模式,对真实对象的访问通过代理完成#includeusing namespace std;//代理和真实对象的公用接口class Subject{public: virtual void request()=0; virtual void behavior()=0;};//真实对象class RealSubject:public Subject{public:原创 2015-08-26 09:37:28 · 586 阅读 · 0 评论 -
vector\list\deque的选取
下面是选择顺序容器类型的一些准则 1、 如果我们需要随机访问一个容器则vector要比list好得多 。 2、 如果我们已知要存储元素的个数则vector 又是一个比list好的选择。 3、如果我们需要的不只是在容器两端插入和删除元素则list显然要比vector好 4、除非我们需要在容器首部插入和删除元素否则vect原创 2015-07-29 21:52:16 · 617 阅读 · 0 评论 -
《STL源码剖析》学习笔记(二)
STL标准模板库作为C++标准库的一部分,其组件包括:容器、算法、迭代器、仿函数、配接器、配置器。 今天来说说容器,容器主要可以分为两种:序列式容器(元素是可序的,但并非有序)、关联式容器。一、序列式容器 1、vector 1)vector和C/C++的内置数组类似,只不过array空间是静态的,vector的空间则是可以改变的,当元素个数达到空间上原创 2015-07-29 21:27:41 · 730 阅读 · 0 评论 -
希尔排序C++实现
//shell sort//希尔排序是一种对直接插入排序的改进方法,//使用直接插入排序对于一个基本有序的数列进行排序时,内部循环的次数会明显减少,因此可以减小时间复杂度;//希尔排序就是先使数列基本有序,然后再直接插入排序,减小插入排序的时间复杂度;//希尔排序首先按一定增量进行插入排序,再逐步缩减增量,当这一增量缩减至1时,希尔排序变为直接插入排序;//所以这一增量的选取很关键,且这原创 2015-08-24 11:27:32 · 1187 阅读 · 0 评论 -
堆排序C++实现
//heap sort//堆排序可以分为两个过程,其一是建堆,其二是出堆//堆是一种完全二叉树,所以它可以用数组进行存储;//堆可分为最大堆和最小堆,最大堆指任一节点的值都大于其左右孩子节点的值,最小堆自不必说;//STL中有一套完整的堆排序算法,其相关函数包括make_heap\push_heap\pop_heap\sort-heap//四个函数都是接受一对迭代器作为参数,其作用分原创 2015-08-24 09:49:31 · 1665 阅读 · 1 评论 -
基数排序C++实现
基数排序介绍基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。 具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。基数排序图文说明基数排序图文说明通过基数排序对数组{53, 3, 54原创 2015-08-24 19:56:38 · 4103 阅读 · 0 评论 -
桶排序C++实现
//bucket sort//现在假设我有一堆蛋,包括麻雀蛋、鸡蛋、恐龙蛋,相同类别蛋的大小是一样的,现在我要将这几种蛋排序下序;//有点常识就知道,这三种类别的蛋大小是不一样的,现在我对这三种蛋进行排序,我是这样排的://准备三个桶,把同一类别的蛋放到同一个桶中,然后按顺序从三个桶中取出相应蛋排序;//即,从放有麻雀蛋的桶里取出所有麻雀蛋,依次排好序,大小都一样,随便怎么排了,然后再将鸡原创 2015-08-24 10:54:28 · 4068 阅读 · 3 评论 -
几个论坛上看到的2015小米笔试题
一、题目描述 大家对回文串不陌生吧?一个字符串从前看和从后看如果一样的话,就是回文串,比如“上海自来水来自海上”就是一个回文串。现在我们的问题来了,把一个数字看成字符串,问它是不是一个回文数?时间复杂度和空间复杂度越低的算法,得分越高。c++: bool isPalindromeNumber(long num);java: boolean isPal原创 2015-07-29 10:51:46 · 1722 阅读 · 0 评论 -
计数排序C++实现
//counting sort//计数排序基于一个假设,待排序数列的所有数均出现在(0,k)的区间之内,如果k过大则会引起较大的空间复杂度//计数排序并非是一种基于比较的排序方法,它直接统计出键值本应该出现的位置//时间复杂度为O(n),空间复杂度为O(n+k)#include#includeusing namespace std;void countSort(vector&原创 2015-08-24 17:03:30 · 1642 阅读 · 1 评论 -
对fork()函数的理解
头文件: #include [cpp] view plaincopypid_t fork (void); 1. 创建一个子进程,失败返回-1。2. 调用一次,返回两次。分别在父子进程中返回子进程的PID和0。利用返回值的不同,可以分别为父子进程编写不同的处理分支。[cpp] view plainc转载 2015-07-29 14:20:46 · 635 阅读 · 0 评论 -
快速排序算法C++实现
//quick sort//STL中也有现成的快速排序算法,内部实现采用了以下技巧//1)枢轴的选择采取三数取中的方式//2)后半段采取循环的方式实现//3)快速排序与插入排序结合#include#include#includeusing namespace std;//这一版本是最简单实现版本,对于快速排序的优化主要有以下几个方面://1)枢轴的选择,若枢轴选取不全适,比原创 2015-08-23 23:05:42 · 987 阅读 · 0 评论 -
设计模式之七外观模式
//外观模式:给接口提供一致的外观//当客户需要使用到子系统的多个功能时,客户如果逐个去调用每一个功能会引起较大代码量;//并存在潜在的错误可能性;//如果这些功能都位于不同的类中,客户需要去了解每一个类//解决方法是:为所有类的接口提供一个一致的接口,这一接口提供了所有用户需要的操作;//通俗理解:木兰从军,需要买各种从军用品如马、马鞍、配剑、靴子等,这些东西都不在同一个店里,从而导致原创 2015-08-26 17:12:34 · 654 阅读 · 0 评论 -
设计模式之三装饰模式
//decorate model//用于给某些类动态添加功能,虽然添加了一些功能,但人还是人,只不过是装饰后的人#include#includeusing namespace std;class Person{//被装饰对象类public: virtual void show() { cout<<"Person"<<endl; }};class Decorate:原创 2015-08-26 09:02:48 · 538 阅读 · 0 评论 -
字符串匹配算法
第一篇随笔,开始写博客生涯。写程序这么长时间,突然发现也要总结与积累。原来想第一篇博文是关于以前写的代码研究,发现还需要整理。这样,先发表一篇关于字符串匹配的文章。就这样啦! 字符串匹配主要是关于模式串与主串匹配的问题。关于这个问题,有很多方法。网上也有不少例子,借鉴了不少,以下就介绍下面几种算法。 (1)BF算法(常规算法)转载 2015-09-15 15:59:48 · 866 阅读 · 0 评论 -
朋友圈问题
/*问题描述:假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5, m = 3, r = {{1 , 2} , {2 , 3} ,{4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友圈,4、5属于另一个朋友原创 2015-09-30 18:22:19 · 2046 阅读 · 0 评论 -
KMP模式匹配算法
/*字符串匹配*/#includeusing namespace std;void get_next(string T,int *next){//朴素算法 int i,j; i=1; j=0; next[1]=0; while(i<T.length()) { if(j==0 || T[i]==T[j]) { i++; j++; next[i]=j;原创 2015-07-01 16:41:26 · 741 阅读 · 0 评论 -
内存池C++实现
程序在向系统申请内存时,很容易造成内存碎片,影响程序性能。内存池是一种内存分配策略,程序在之前,先向系统申请一大块内存,并将这一大块内存分割成若干小的内存块,供程序使用。当内存不足时再向系统申请。 1、程序以1024位为界,将内存块block分为两种,一种是普通的block,可以直接向内存池申请,一种是大block,需要向系统申请; 2、MemoryChunk中是一系列大小相等的b原创 2015-09-27 17:08:13 · 636 阅读 · 0 评论 -
C语言undefined behaviour未定义行为
C语言中的未定义行为(Undefined Behavior)是指C语言标准未做规定的行为。同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又或者如果程序调用未定义的行为,可能会成功编译,甚至一开始运行时没有错误,只会在另一个系统上,甚至是在另一个日期运行失败。当一个未定义行为的实例发生时,正如语言标准所说,“什么事情都可能发生”,也许什么转载 2015-08-22 22:57:08 · 1985 阅读 · 0 评论 -
2016百度的三个编程题
感觉三个题目也不算特别难吧,但还是做的跟翔一样,没有给出标准的接口,其次也没法调试,也不知道对不对就直接提交了.而且转移罪犯的题怎么看都觉得给的算例有问题.最后问一句:有多少人是以为百度所有题都是可以更改的?原创 2015-09-12 21:32:44 · 618 阅读 · 0 评论 -
百度试题:度度熊
加班了一个通宵的度度熊,神经有点恍惚,想到依然未能解决的Bug,眼泪禁不住霹雳哗啦往下掉……他抬头看了看帝都灰蒙蒙的天空,一咬牙,一跺脚,大叫一声——劳资今天要吃点好的!已知本厂有n个食堂,第i(i属于[1,n])个食堂有m[i]种食物,每种食物有一个价钱c,享受度v,度度熊希望去一个食堂就餐,花费[bot,top]范围内的钱数(也可以拍桌子走人,哪里都不吃了),选择若干种食物,使得自己所能获得的原创 2015-09-12 16:24:25 · 1051 阅读 · 0 评论 -
vs 2008的相关插件
用了多年vs2008了,一直没怎么换过,不过用vs机会也不是很多,今天重装系统,把用的几个插件整理一下。1、MetalScrollSetup:类似于Sublime的侧边栏2、VimEmu:vim的编辑环境3、vs2008_VAX:一系列有用工具链接:点击打开链接原创 2015-09-07 19:39:37 · 1475 阅读 · 0 评论 -
01背包问题
容量为V的背包,装N件物品,使所装物品价值最大//01背包问题//朱传林于20150912//状态转移方程:f[i][v]=MAX{f[i-1][v],f[i-1][v-c[i]]+w[i]}#include#includeusing namespace std;const int N=3;const int V=10;//如果要求刚好装满,除了v=0时刚妈装满,原创 2015-09-12 09:45:19 · 705 阅读 · 0 评论 -
三种继承方式的区别
对于public和protected成员,三种继承方式仅仅只是改变了在子类中的访问标号。但对于private成员,无论哪种继承方式,在子类中都是不可访问的,但这种成员在子类中仍然占有存储空间。原创 2015-08-17 08:54:22 · 2840 阅读 · 0 评论 -
整数与浮点数的二进制表示方式
一、整数的表示1、对于无符号数,可以认为是不包含负数的原码表示方法,即直接把正数转换成二进制表示; 对于有符号数,有三种表示方法 1)补码,最高位的权重为-2^(w-1),这是原码表示的最高位权重是正好相反的。补码是有符号数用的最多的编码方式,表示的有符号数据的范围为[-2^(w-1),2^(w-1)-1]。 2)反码,最高位的权是-(2^(w-1)-原创 2015-06-13 15:45:27 · 2907 阅读 · 0 评论 -
TR1和Boost
TR1是对C++标准库的一次扩充;Boost是备用标准库;原创 2015-08-12 15:30:29 · 1379 阅读 · 1 评论 -
设计模型之二策略模式
//strategy model//策略模式是一种定义一系列算法的方法#includeusing namespace std;//一个抽象的策略类class Strategy{public: virtual void algorithmInterface()=0;};//三种不同策略class StrategyA:public Strategy{ void algori原创 2015-08-25 21:51:28 · 825 阅读 · 0 评论 -
设计模式之五工厂方法模式
//simple factory model//与简单工厂模式的区别:简单工厂模式在增加新操作时,需要更改工厂函数,违反了开放与封闭原则//而工厂方法模式支持扩展,在修改时只需要添加新的操作类和工厂类即可,但客户端也需要作相应的修改#includeusing namespace std;//用一个单独的类来做这个创造实例的过程,即工厂class Operation{public:原创 2015-08-26 11:27:07 · 534 阅读 · 0 评论 -
归并排序C++实现
//merge sort//归并排序是通过将两个有序的数列合并成一个有序的数列的排序过程;//具体流程可以看成一个树形结构,最底层是两个结点合并,往上合并的结点个数越多,所以时间复杂度为O(nlgn);#include#includeusing namespace std;//二路归并,当然也可以多路归并,核心templatevoid merge(vector& vec,原创 2015-08-24 15:51:21 · 933 阅读 · 0 评论 -
lib和dll的区别
共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。共有两种链接方式:动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅转载 2015-08-09 10:03:50 · 483 阅读 · 0 评论 -
逆波兰法求解数学表达示(C++)
主要是栈的应用,里面有两个函数deleteSpace(),stringToDouble()在我另一篇博客当中:对string的一些扩展函数。 本程序只是基本的功能实现,没有差错控制。#include#include#include#include#include"fstring.h"/* *采用逆波兰表示法求解数学表达示 *1、将输入的中缀表示示转换成后原创 2015-07-01 14:41:48 · 968 阅读 · 1 评论 -
hpp文件
hpp文件是c++程序的头文件,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写原创 2015-04-28 10:54:01 · 642 阅读 · 0 评论 -
C++结构变量数据对齐问题
为了避免混淆,做如下规定,以下代码若不加特殊说明都运行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为char占一个字节int占四个字节double占八个字节。两个例子请问下面的结构体大小是多少?struct Test{ char c ; int i ;};这个呢?struct Test1{ int i原创 2015-07-03 09:07:17 · 771 阅读 · 0 评论 -
排序算法合集
排序算法复习大致结束了,主要有以下几种:冒泡排序、选择排序、简单插入排序、希尔排序、归并排序、快速排序、堆排序。#include #define MAXSIZE 1000using namespace std;class SqList{public: SqList():length(0){} SqList(int length1,int value=0):length(le原创 2015-06-30 08:43:37 · 986 阅读 · 0 评论 -
数组中出现次数超过数组长度一半的值
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为18的数组{1,0,2,6,1,0,1,1,5,2,1,1,1,3,1,1,5,1}, 由于数组中数字1出现的次数超过数组的长度的一半,因此输出1。1)最直接的办法是先把数组排序,那么超过一半的元素一定是数组最中间的元素。2)再深入思考一下就会想到快速排序过程,利用partion找出index==原创 2015-07-09 15:38:37 · 721 阅读 · 0 评论 -
C++中的随机数函数
C++中产生随机数种子对于初学者一直都很困惑.大家知道,在C中有专门的srand(N)函数可以轻松实现这一功能,然而在C++中则要复杂一些.下面是笔者学习的一点心得,希望对大家能有所帮助.(这里我们依然要借助C标准库中的rand()函数) 函数说明: int rand(); :返回从[0,MAX转载 2015-07-27 12:24:27 · 552 阅读 · 0 评论 -
二叉搜索树(C++)
#include using namespace std;typedef struct BiTNode{ int data; struct BiTNode *lchild, *rchild;}BiTNode,*BiTree;class solution{public: bool searchBst(BiTree root, int key, BiTree f, BiTree原创 2015-07-09 11:18:12 · 761 阅读 · 0 评论 -
C++重载操作符
1、并不是所有操作符都可以重载;2、不能为内置类型重载操作符;3、被重载操作符的优先级不能被改变;4、作为类成员的重载操作符缺少一个实参;原创 2015-05-27 18:43:24 · 506 阅读 · 0 评论