C++
muweiyou
这个作者很懒,什么都没留下…
展开
-
C++面试常见题(转)
c++面试常见题c++博客原创 2019-09-05 14:50:43 · 128 阅读 · 0 评论 -
简单的 C++ SOCKET编程 ---基于TCP/IP协议(转)
//server端: #include #include #pragma comment(lib,"ws2_32.lib")void main(){ //创建套接字 WORD myVersionRequest; WSADATA wsaData; myVersionRequest=MAKEWORD(1,1); int err; err=WSAStartup(myVersio转载 2012-07-11 14:41:15 · 528 阅读 · 0 评论 -
C++ 重写重载重定义区别
用的时候老是忘记。特此记下。重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中出现的 。重写需要注意:1 被重写的函数不能是static的。必须是virtual的2 重写函数必须有相同的类型,名称和参数转载 2012-06-20 16:25:51 · 1069 阅读 · 0 评论 -
C++函数名字的隐藏:重写、重载、重定义
概要: C++中经常出现函数名字一样,但参数列表或返回值不同的函数,要搞清楚函数的正确调用关系,需理清三个概念:重写(override)、重载(overload)、重定义(redefine)。一、三个基本概念 1、重定义(redefine):派生类对基类的成员函数重新定义,即派生类定义了某个函数,该函数的名字与基类中的函数名字一样。 特点:(转载 2012-06-20 15:27:54 · 544 阅读 · 0 评论 -
拷贝构造函数及其参数类型
拷贝构造函数的参数类型必须是引用,而且通常情况下还是const的,但是const并不是严格必须的。#include #include using namespace std;class CClass{public: CClass() : a(1), b("Hello, world.") { }转载 2012-06-19 12:36:21 · 1858 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之二十一-完结篇
一个月下来,把常见的20个设计模式好好复习并且逐个用C++实现了一遍,收获还是很大的,很多东西看上去明白了但是真正动手去做的时候发现其实还是不明白--我深知这个道理,于是不敢怠慢,不敢写什么所谓的解释原理的伪代码,不敢说所谓的"知道原理就可以了"....因为我知道,我还还没有资格说这个话,至少对于设计模式而言我还是一个初学者,唯有踏实和实干才能慢慢的掌握到知识. 在我学习设计转载 2012-05-25 09:38:39 · 862 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之二十-Visitor模式
作用:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.UML结构图:解析:Visitor模式把对结点的访问封装成一个抽象基类,通过派生出不同的类生成新的访问方式.在实现的时候,在visitor抽象基类中声明了对所有不同结点进行访问的接口函数,如图中的VisitConcreateElementA函数等,这样也造成了转载 2012-05-25 09:37:38 · 884 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之十九-Memento模式
作用:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.UML结构图:解析:Memento模式中封装的是需要保存的状态,当需要恢复的时候才取出来进行恢复.原理很简单,实现的时候需要注意一个地方:窄接口和宽接口.所谓的宽接口就是一般意义上的接口,把对外的接口作为public成员;而窄接口反之,把接口作为p转载 2012-05-25 09:36:22 · 523 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之十七-State模式
作用:允许一个对象在其内部状态改变时改变它的行为.UML结构图:解析:State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当转载 2012-05-25 09:33:32 · 495 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之十五-Observer模式
作用:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.UML结构图:解析:Observer模式定义的是一种一对多的关系,这里的一就是图中的Subject类,而多则是Obesrver类,当Subject类的状态发生变化的时候通知与之对应的Obesrver类们也去相应的更新状态,同时支持动态的添加和删除Observ转载 2012-05-25 09:25:46 · 481 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之十三-FlyWeight模式
作用:运用共享技术有效地支持大量细粒度的对象。UML结构图:解析:Flyweight模式在大量使用一些可以被共享的对象的时候经常使用.比如,在QQ聊天的时候很多时候你懒得回复又不得不回复的时候,一般会用一些客套的话语敷衍别人,如"呵呵","好的"等等之类的,这些简单的答复其实每个人都是提前定义好的,在使用的时候才调用出来.Flyweight就是基于解决这种问题的思路转载 2012-05-25 09:18:01 · 594 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之九-Decorator模式
作用:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。UML结构图:抽象基类:1)Component:定义一个对象接口,可以为这个接口动态的添加职责.2)Decorator:维持一个指向Component的指针,并且有一个和Component一致的接口函数.接口函数:1)Component::Operat转载 2012-05-25 09:06:32 · 494 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之十六-Strategy模式
作用:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.UML结构图:解析:简而言之一句话,Strategy模式是对算法的封装.处理一个问题的时候可能有多种算法,这些算法的接口(输入参数,输出参数等)都是一致的,那么可以考虑采用Strategy模式对这些算法进行封装,在基类中定义一个函数接口就可以了.实现:转载 2012-05-25 09:29:09 · 360 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之十二-ChainOfResponsibility模式
作用:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.UML结构图:抽象基类:1)Handler:定义一个处理请求的接口,在图中这个接口就是HandleRequset函数,这个类同时有一个指向Handler对象的指针,指向后续的处理请求的对象(如果有的话).解析:转载 2012-05-25 09:13:47 · 526 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之十-Proxy模式
作用:为其他对象提供一种代理以控制对这个对象的访问。UML结构图:抽象基类:1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy.解析:Proxy其实是基于这样一种时常使用到的技术-某个对象直到它真正被使用到的时候才被初始化,在没有使用到的时候就暂时用Proxy作一个占转载 2012-05-25 09:08:42 · 389 阅读 · 0 评论 -
浮点数在计算机中存储方式
作者:jillzhang 原文地址:http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是转载 2012-07-24 16:26:06 · 555 阅读 · 0 评论 -
二维数组的动态定义
C语言://动态定义二维数组int **p; p = (int **)malloc(sizeof(int *)*m); for(int i=0; i <n; i++) { p[i] = (int*)malloc( sizeof(int)*n); } C++语言://动态定义二维数组int **p ;p = new int*[m] ;for原创 2012-07-28 16:02:54 · 800 阅读 · 0 评论 -
c++多线程
#include<iostream>#include<stdio.h>#include<string.h>#include<sstream>#include<unistd.h>#include<pthread.h>using namespace std;pthread_t thread[2];pthread...原创 2019-08-23 15:22:31 · 158 阅读 · 0 评论 -
常量指针与指针常量
常量指针,就是指向常量的指针,关键字 const 出现在 * 左边,表示指针所指向的地址的内容是不可修改的,但指针自身可变。指针常量,指针自身是一个常量,关键字 const 出现在 * 右边,表示指针自身不可变,但其指向的地址的内容是可以被修改的。例: 常量指针: const char* ptr = “hello” 指针常量: char* const转载 2013-03-09 14:30:32 · 629 阅读 · 0 评论 -
判断单链表是否存在环,判断两个链表是否相交问题详解
有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题:1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如何找到环的入口点?解答:一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fas转载 2012-10-20 22:48:22 · 527 阅读 · 0 评论 -
最长不重复子串+质因数分解算法
#include#include/* 求最长不重复子串 *//************************************************************************/void lnorepstr(char* s){ char A[26原创 2012-10-13 20:58:09 · 901 阅读 · 0 评论 -
三、四柱汉诺塔最小步数
三柱汉诺塔最小步数函数为:hntf3(n);四柱汉诺塔最小步数函数为:hntf4(n).int hntf3(int n){ if(n==1) return 1; return 2*hntf3(n-1)+1;}三柱汉诺塔最小步数的规律是:f(n)=2^n-1(n为盘子数)int hntf4(int n){ if(n==1) return 1; int min,u;原创 2012-09-10 22:55:42 · 8362 阅读 · 0 评论 -
用两个队列实现栈
程序员面试精选100题(18)给出了用两个栈实现队列的方法,这种方法不再重述,这里将给出用两个队列实现栈的方法。代码清单如下:#include#include#include#includeusing namespace std;templateclass stack{public: stack(){} ~stack(){} void push(T x); T p原创 2012-09-12 19:54:38 · 636 阅读 · 0 评论 -
《编程之美》 3.10 分层遍历二叉树
给定一颗二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层将单独输出一行),每一行要求访问的顺序是从左到右。《编程之美》中有递归和非递归的解法。递归解法的思路是,假设要求访问二叉树中第K层的节点,那么可以把它转换成访问以该二叉树根节点的左右节点为根的两颗左右子树的第K-1层的节点。依次递归下面程序是输出第K层的节点int PrintNodeAtLe转载 2012-09-13 19:46:04 · 717 阅读 · 0 评论 -
《编程之美》 2.18 数组分割
一、题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:S(k, 1) = {A[i] | 1S(k, k) = {A[1]+A[2]+…+A[k]}S(k, i) = S(转载 2012-09-11 12:10:41 · 794 阅读 · 0 评论 -
《编程之美》 3.8 求二叉树中节点的最大距离
问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。书上的解法书中对这个问题的分析是很清楚的,我尝试用自己的方式简短覆述。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。情况B: 路径不穿过根节点,而是转载 2012-09-12 20:22:39 · 616 阅读 · 0 评论 -
《编程之美》 3.3 计算字符串的相似度
许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelling”变为“traveling”); 比如,对于“abcdefg”和“abcd转载 2012-09-11 21:08:01 · 675 阅读 · 0 评论 -
《编程之美》 2.19 区间重合判断
解法二的思路:1 排序 O(N*logN) (N为目标区间的个数)2 合并 O(N)3 二分查找 O(k*logN) (k为合并后区间的个数)// 2.19.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include#includeusing namespace std;struct ar原创 2012-09-11 14:19:11 · 1535 阅读 · 0 评论 -
最长递增子序列LIS(动态规划+二分查找)
/** =====================================================================================** Filename: LIS.c** Description: 求数组的最长递增子序列的长度(Longest Inceasing SubSequence: LIS)*转载 2012-09-03 13:53:03 · 1131 阅读 · 0 评论 -
顺时针打印矩阵
1.题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字例如:如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。http://zhedahht.bl原创 2012-09-09 10:18:26 · 834 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之八-Composite模式
作用:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。UML结构图:抽象基类:1)Component:为组合中的对象声明接口,声明了类共有接口的缺省行为(如这里的Add,Remove,GetChild函数),声明一个接口函数可以访问Component的子组件.接口函数:1)Component转载 2012-05-25 08:56:28 · 493 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)之十八-Iterator模式
作用:提供一种方法顺序访问一个聚合对象中各个元素,,而又不需暴露该对象的内部表示.UML结构图:解析:Iterator几乎是大部分人在初学C++的时候就无意之中接触到的第一种设计模式,因为在STL之中,所有的容器类都有与之相关的迭代器.以前初学STL的时候,时常在看到讲述迭代器作用的时候是这么说的:提供一种方式,使得算法和容器可以独立的变化,而且在访问容器对象的时候不必转载 2012-05-25 09:35:14 · 523 阅读 · 0 评论 -
常见设计模式的解析和实现(C++)文档及源码打包下载
把这个系列的文章和相应的代码打包在了一起,方便阅读察看,代码是用标准C++写的,应该可以跨平台编译链接,VC7.1下面测试通过.文章经过word到pdf的转换处理,加了标签方便查找相应的主题,有任何建议和意见,批评砖头等等的都欢迎! 下载地址: 文档下载地址 BTW: 很多朋友在前面给出了很多意见,如封装不够好,基类的构造函数应该放在pr转载 2012-05-25 09:48:04 · 1105 阅读 · 0 评论 -
C++读写文件
掌握文本文件读写的方法了解二进制文件的读写方法C++文件流:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流//创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include#includevoid main(){ ofstream f1("d:\\me.txt");转载 2011-10-13 10:14:00 · 371 阅读 · 0 评论 -
输入一个n,在屏幕上打印出N*N的矩阵(华为面试题)
题目:输入一个n,在屏幕上打印出N*N的矩阵。例如:输入一个3,则输出:1 2 38 9 4 7 6 5输入一个4,刚输出: 1 2 3 412 13 14 511 16 15 610 9 8 7答案:#include#include#define N 10void printCube(int a[][N],int n);//数组存转载 2012-01-05 22:31:14 · 11730 阅读 · 0 评论 -
《编程之美》1.1 让CPU占用率曲线听你指挥
这是微软亚洲研究院编写的一本书《编程之美》上的第一个例子。效果是让Windows任务管理器的CPU利用率画出一条正弦曲线。下面是效果图: 一、原理 通过观察,任务管理器里CPU利用率曲线的刷新频率是每秒一次,每次绘制一秒内的平均值,并且和上一个点连起来。如果一秒内0.5秒执行程序,0.5秒休眠,那么这一秒的曲线将位于50%的地方。如果要画出正弦曲线,我们只需要计算出每一秒内曲转载 2012-02-22 14:40:18 · 590 阅读 · 0 评论 -
《编程之美》1.6 饮料供货
1 书中的算法分析在微软亚洲研究院上班,大家早上来的第一件事是干啥呢?查看邮件?No,是去水房拿饮料:酸奶,豆浆,绿茶、王老吉、咖啡、可口可乐……(当然,还是有很多同事把拿饮料当做第二件事)。管理水房的阿姨们每天都会准备很多的饮料给大家,为了提高服务质量,她们会统计大家对每种饮料的满意度。一段时间后,阿姨们已经有了大批的数据。某天早上,当实习生小飞第一个冲进水房并一次拿了五瓶酸奶、四瓶王老原创 2012-04-10 13:11:59 · 1444 阅读 · 0 评论 -
汉诺塔 算法(递归和非递归算法)
算法介绍:其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n – 1(有兴趣的可以自己证明试试看)。后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了。首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序放在柱子A上,根据圆盘的数量确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放 A B C;若n为奇数,按顺时针方向依次摆放 A C B。(1转载 2011-12-30 10:46:47 · 1133 阅读 · 0 评论 -
Prim最小生成树算法
在一个具有几个顶点的连通图G中,如果存在子图G'包含G中所有顶点和一部分边,且不形成回路,则称G'为图G的生成树,代价最小生成树则称为最小生成树。 许多应用问题都是一个求无向连通图的最小生成树问题。例如:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同;另一个目标是要使铺设光缆的转载 2012-04-24 16:45:38 · 701 阅读 · 0 评论 -
欧拉回路
欧拉回路:一个回路,该回路恰好经过每条边一次。终点必须终止在起点上的欧拉回路只有当图是连通 的并且每个顶点的度(即边的条数)是偶数时才有可能存在。这是因为,在欧拉回路中,一个顶点 有边进入,则必然有边离开。如果任一顶点v的度为奇数,那么最终会达到这样一种地步,即只有一条进入v的边尚未访问到,若沿该边进入v点,那么只能停在顶点v,不可能再出来。如果恰好有两个顶点的度是奇数,那么当从一个奇原创 2012-04-25 09:23:40 · 4246 阅读 · 0 评论