- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 从一道面试题看深拷贝、浅拷贝构造函数问题 (经典)
请看下面的程序,说说会出现什么问题?#include #include #include using namespace std; class CDemo { public: CDemo(char*str=NULL) { if (str==NULL)//当初始化串不存在的时候,为m_data申请一个空间存放'\0';
2015-04-30 10:10:25 1081
原创 sizeof(string)的问题(很经典)
今天看到一个代码,刚开始没有看明白,代码如下:#include#includeusing namespace std;void main(){string a="www.ok2002.com";string b=" study C++ program";a.append(b,0,sizeof(b)+2);cout<<a<<" "<<sizeof(b)<<endl;}结果显示:
2015-04-28 12:57:19 16733 2
原创 C++ string操作
append()//C++ append()函数|C++ 一个字符串连接在另一个字符串后面【C++ string】#include#includeusing namespace std;void main(){string a="www.ok2002.com";string b=" study C++ program";a.a
2015-04-28 12:45:18 2729
原创 字符交替
字符交替:给出两个字符串打印出所有由这两个字符串交替组成的字符串,要求维持原有字符的相对顺序举例:输入“AB”和“CD”输出:ABCDACBDACDBCABDCADBCDAB分析:1、当S1和S2均无字符可用时,则返回空串。2、当其中一个无字符可用,比如S1剩余字符为空,那么把S2剩余字符附在已经得到的字符组合后面,并输出结果。3、其他情况,我们
2015-04-28 12:10:42 1286
原创 构造函数复制构造函数经典问题
#includeusing namespace std;class A{public: A(int x=0) { a=x; cout<<"A Constructor"<<endl; } A(A&t) { cout<<"A COPY"<<endl; } ~A() { cout<<"A Destructor"<<endl; } void display()
2015-04-27 18:30:31 838
原创 反转二叉树,即交换所有结点的左右子树,但不能使用递归方法。
反转二叉树,即交换所有结点的左右子树,但不能使用递归方法。解析:既然不能使用递归那么可以使用栈,代码如下:#include #include #include#include #include using namespace std; typedef struct BinaryTreeNode { int m_nValue; Bin
2015-04-22 09:42:11 3936 1
原创 assert()函数用法总结
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单b
2015-04-22 09:27:41 26962 1
原创 找出重复次数最多的数字
问题给定一个大小为n的数组,该数组包含数字的范围在 [0...k-1], k是一个正整数,k 例如, 假设k= 10给定的数组是arr[] = {1, 2, 2, 2, 0, 2, 0, 2, 3, 8, 0, 9, 2, 3},最大的重复数量将是2。期望的时间复杂度是O(n),空间复杂度为O(1),允许修改原数组。分析方法一:使用双重循环,逐个判断
2015-04-20 10:15:59 6444 1
原创 二维数组名如何作为参数传递
在用二维数组名作为参数传递时容易出现Segmention Error。这是因为不能正确为二维数组中元素寻址的问题,正确的方法如下:[cpp] view plaincopy#include #include #define N 4 void testArray(int *a, int m, in
2015-04-16 10:34:42 5254 2
原创 c++模板类学习
如同函数模板一样,使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意类型。类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。 定义类模板的一般形式是: template cl
2015-04-16 10:30:04 900
原创 复制构造函数和析构函数经典例子
#includeusing namespace std;class A{public: A() { cout<<"this is construction"<<endl; } virtual ~A() { cout<<"this is destruction"<<endl; }};A fun(){ A a; return a;}int main(){
2015-04-16 10:15:26 2146
原创 a++和++a可不可以作为左值
1)首先说左值和右值的定义:变量和文字常量都有存储区,并且有相关的类型。区别在于变量是可寻址的(addressable)对于每一个变量都有两个值与其相联:1).它的数据值,存储在某个内存地址中。有时这个值也被称为对象的右值(rvalue,读做are-value).我们也可认为右值的意思是被读取的值(read value)。文字常量和变量都可被用作右值。2).它的地址值——即存储数据
2015-04-15 14:47:17 2969 26
原创 荷兰国旗
题目描述拿破仑席卷欧洲大陆之后,代表自由,平等,博爱的竖色三色旗也风靡一时。荷兰国旗就是一面三色旗(只不过是横向的),自上而下为红白蓝三色。该问题本身是关于三色球排序和分类的,由荷兰科学家Dijkstra提出。由于问题中的三色小球有序排列后正好分为三类,Dijkstra就想象成他母国的国旗,于是问题也就被命名为荷兰旗问题(Dutch National Flag Problem)。下
2015-04-15 12:29:18 2256
原创 用rand7()构造rand10()
rand7生成7个整数,没有办法均匀的映射成10个整数,但是运行两次rand7可以生成49个数字,如果这49个数字是均匀分布的,舍去多余的9个,剩下的40个正好可以用模10运算映射到10个整数上。代码1view plainint i; do { i = 7 * (rand7() - 1) + rand7(); // it is
2015-04-14 16:06:27 2059
转载 计算机的启动过程(详细)
零、boot的含义先问一个问题,”启动”用英语怎么说?回答是boot。可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:"pull oneself up by one's bootstraps"字面意思是”拽着鞋带把自己拉起来”,这当然是不可能的事情。最早的时候,工程师们用它来比喻,计
2015-04-14 14:30:55 884
原创 程序在内存中的分布
在现代的操作系统中,当我们说到内存,往往需要分两部分来讲:物理内存和虚拟内存。从硬件上讲,虚拟空间是CPU内部的寻址空间,位于MMU之前,物理空间是总线上的寻址空间,是经过MMU转换之后的空间。一般我们所说的程序在内存中的分布指的就是程序在虚拟内存中的存储方式。从低地址到高地址,可分为下面几段: 预留内存地址(操作系统维护的内存地址,不可访问) 程序代码区(只读,存代码和一
2015-04-14 12:47:26 1891 3
原创 编程之美:黑白球问题
题目:有一个桶,里面有白球、黑球各100个,人们必须按照以下的规则把球取出来:1、每次从桶里面拿出来两个球;2、如果是两个同色的球,就再放入一个黑球;3、如果是两个异色的球,就再放入一个白球;问:最后桶里面只剩下一个黑球的概率是多少?思路1:找规律 使用(黑球个数, 白球个数)来表示桶中黑球和白球的个数变动,正数表示增加,负数表示减少,根据规则
2015-04-14 10:49:32 3746 4
原创 fork()函数详解
一、fork入门知识进程的定义:进程是一个执行中的程序的实例,是系统进行资源分配和调度的一个独立单位。PCB是进程存在的唯一标识。PCB应常驻内存,不管在linux还是windows中都有专门区域存储每个进程的PCB。进程的创建:子进程可以继承父进程所拥有的所有资源,当子进程被撤销时,应将其从父进程那里获得的所有资源归还给父进程,在撤销父进时,也必须同时
2015-04-13 20:57:07 3423
原创 Bitmap
什么是Bit-map所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示8个数,我们就只需要8个Bit(1B
2015-04-13 10:37:10 1253 1
原创 linux下configure命令详细介绍
Linux环境下的软件安装,并不是一件容易的事情;如果通过源代码编译后在安装,当然事情就更为复杂一些;现在安装各种软件的教程都非常普遍;但万变不离其中,对基础知识的扎实掌握,安装各种软件的问题就迎刃而解了。Configure脚本配置工具就是基础之一,它是autoconf的工具的基本应用。与一些技巧相比,Configure显得基础一些,当然使用和学习起来就显得枯燥乏味一些,当然要成为高手,对
2015-04-12 15:05:39 6012
原创 基于TCP的协议,基于UDP的协议
TCP与UDP区别TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不
2015-04-11 13:32:14 11925
转载 程序员如何选择技术方向
最近写了「当程序员老去」「程序员真正的价值」两篇文章,传播甚广,今天是第三篇:「程序员如何选择技术方向」,史称「程序员三部曲」。 那之前写的几篇程序员文章算什么呢?算前传吧。以后再写程序员文章算什么呢?算后记吧。 2008年秋天的一个午后,温暖的阳光透过落地窗落在我面前这个长长的写字桌上,桌子对面坐的是一个瘦小的程序员,他的名字叫小明,小明有些茫然,他看着我,不知道该说些什么。
2015-04-11 12:49:43 958
原创 C++洗牌算法
1、使用标准库中的random_shuffle()函数实现很简单,代码如下:int main() { vectorint> s_stl; for (int i=0; i random_shuffle(s_stl.begin(),s_stl.end()); cout "使用C++算法库:"; for (vectorint>::iterator it=s_st
2015-04-11 12:22:37 15802 1
原创 一道经典面试题,字符数组排序问题(字符包含a-z、A-Z、0-9.)
一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。解析:可以将整个字符数组进行排序,然后将整个数组逆序,然后a-z、A-Z、0-9在分别逆序就可以了//一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所
2015-04-10 21:51:27 9099 3
原创 求解最大公约数和最小公倍数问题
思路:最大公约数问题也是一个非常典型的递归算法的应用。每次递归使得原来求两个大数之间的公约数转变成求两个稍微小点的数之间的公约数,要求转换的过程要保证不会改变公约数的值。这就要看其中转换的原理了。原理从《几何原本》中得出--辗转相除。假设f(x, y) 表示x,y的最大公约数是g,而k = x/y,b= x%y,则g必能整出b。因为x = ky + b,b = x - ky,b/g
2015-04-10 16:50:44 1334
原创 C++的子类指针指向父类
1,直接用基类指针引用基类对象2,直接用派生类指针引用派生类对象3,用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的,但是只能引用基类成员。若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误。(解决该问题的答案是虚函数和多态性)4,用派生类指针引用基类的对象。这种引用方式会导致语法错误。派生类指针必须先强制转换为基类指针,这种方法
2015-04-10 15:38:13 3600 1
原创 给定整数N,按要求输出Z字型矩阵
给定整数N,按要求输出如下Z字型矩阵(N*N):(2014-03北京某移动互联网公司面试题)例如:N=4输出:要求:空间复杂度为O(N)#includeusing namespace std;void display(int N){ int*a=new int[N];//先声明一个数组 memset(a,0,N*sizeof(int));
2015-04-10 08:26:16 2981
原创 不用sizeof()函数求当前主机上的一个int占用几个字节
1)宏定义实现: #define MySizeof(Value) (char*)(&Value + 1) - (char*)&Value (char*)&Value返回Value的地址的第一个字节, (char*)(&Value + 1)返回的是Value的地址的下一个地址的第一个字节#include using namespace std;#define my_sizeo
2015-04-09 19:25:58 1454
原创 正整数分解为几个连续自然数之和
题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:15=1+2+3+4+515=4+5+615=7+8有些数可以写成连续N(>1)个自然数之和,比如14=2+3+4+5;有些不能,比如8.那么如何判断一个数是否可以写成连续N个自然数之和呢?一个数M若可以写成以a开头
2015-04-08 12:55:08 4935 2
原创 (百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。1、把整数放到字符数组里面去,从高位为低位(用变量i)扫描,找到重复的数位,重复数位为“99”跳到第2步,否则跳到第3步,若没有重复的数位,则该数为不重复数,返回;2、遇到“99”的重复数,则把“99”改为“00”,然后在“99”前面一位字符加1,把
2015-04-07 12:10:48 2535
原创 取石子游戏
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other)Total Submission(s) : 1 Accepted Submission(s) : 1Problem Description有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次
2015-04-07 10:05:42 1353
原创 通过金矿模型介绍动态规划(经典入门)
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!----第一节----初识动态
2015-04-06 18:40:25 2150 3
原创 动态规划
什么是动态规划(DP)?1)动态规划是运筹学中用于求解决策过程中的最优化数学方法。 当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法。它是应用数学中用于解决某类最优化问题的重要工具。2)如果问题是由交叠的子问题所构成,我们就可以用动态规划技术来解决它,一般来说,这样的子问题出现在对给定问题求解的递推关系中,这个递推关系包含了相同问题的更小子问题的解
2015-04-06 18:20:23 1058
原创 回溯法
1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
2015-04-06 14:01:32 1443
原创 经典回溯算法(八皇后问题)详解
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上(斜率为1),问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可
2015-04-06 13:58:22 20880 6
原创 求数组中最长递增子序列
数组中最长递增子序列:如在序列1,-1,2,-3,4,-5,6,-7中,最长递增序列为1,2,4,6。时间复杂度O(N^2)的算法:LIS[i]:表示数组前i个元素中(包括第i个),最长递增子序列的长度LIS[i] = max{ 1, LIS[k]+1 }, 0 a[k]int LIS(int a[], int length){ int *LIS = new int[
2015-04-04 19:52:33 1609
原创 计算字符串的相似度
问题许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:1.修改一个字符(如把“a”替换为“b”)。2.增加一个字符(如把“abdd”变为“aebdd”)。3.删除一个字符(如把“travelling”变为“traveling”)。比如,对于“abcdefg”和“abcdef”
2015-04-02 10:21:56 1273 1
原创 两个队列模拟一个栈
#include #include #include using namespace std; /*两个队列模拟一个堆栈*/ /*队列A、B 入栈:将元素依次压入到非空的队列,第一个元素压倒对列A 出栈:把队列A的前n-1个元素倒到队列B,把第n个元素去掉。此时数据在B中,下次操作,则对B操作。 栈顶:把队列A的前n-1个元素倒到队列B,把第n个元素作为栈顶*/
2015-04-01 14:33:41 1614 1
原创 两个栈模拟一个队列
两个栈模拟一个队列,1号栈为入队,栈顶表示队尾;2号栈为出队,栈顶表示队首。入队,直接进1号栈;出队,先判断2号栈是否有元素,有元素就直接弹出栈顶即队首,如果2号栈没有元素,则将1号栈的元素顺序弹出并进2号栈。[cpp] view plaincopy#include #include #include using name
2015-04-01 14:30:18 1040
原创 一个空类被编译器编译后产生了哪些默认函数
为何空类的大小不是0呢?为了确保两个不同对象的地址不同,必须如此。类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二的二地址。同样,空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就有独一无二的地址了。所以,空类的sizeof为1,而不是0.一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明
2015-04-01 09:32:54 1687
图解HTTP(彩色高清带目录).zip
2019-06-24
elasticsearch权威指南高清中文pdf
2019-01-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人