C++
文章平均质量分 71
yangshuangtao
这个作者很懒,什么都没留下…
展开
-
使用WinINet和WinHTTP实现Http访问
使用WinINet和WinHTTP实现Http访问Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,在这个例程中我使用POST方式,提交数据value1与value2,并从服务器得到他们的和(value1 + value2)。为实现Http访问,微软提供了二套API:WinINet, WinHTTP。WinHTTP比WinINet更加安全和健转载 2016-08-11 23:04:21 · 4244 阅读 · 1 评论 -
C++常用库
C++的常用库(转载)标准库 标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。 1、 Dinkumware C++ Library 参考站点:http://www.dinkumware.com/'>http://www.dinkumwar原创 2016-04-19 23:26:24 · 1216 阅读 · 0 评论 -
写时拷贝技术:Copy-On-Write
写时拷贝技术1、概念Scott Meyers在《More EffectiveC++》中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书。这就是“拖延战术”,直到你非要做的时候才去转载 2016-05-25 10:46:38 · 8303 阅读 · 3 评论 -
Windows线程创建、退出及资源释放
可以通过以下几种方法创建一个线程:1、CreateThread2、_beginthread3、_beginthreadex4、AfxBeginThread--------------------------------------------------------------------------------------1、CreateThread函数原型HANDLE Crea转载 2016-04-29 20:27:22 · 3984 阅读 · 0 评论 -
QT-基于TCP的网络通信
Qt使用QtNetwork模块来进行网络编程,提供了一层统一的套接字抽象用于编写不同层次的网络程序,避免了应用套接字进行网络编的繁琐(因有时需引用底层操作系统的相关数据结构)。有较底层次的类如QTcpSocket、QTcpServer和QUdpSocket等来表示低层的网络概念;还有高层次的类如QNetworkRequest、QNetworkReply和QNetworkAccessManager使转载 2016-04-28 16:54:30 · 2298 阅读 · 0 评论 -
apache对象池的使用
Apache commons-pool本质上是"对象池",即通过一定的规则来维护对象集合的容器;commos-pool在很多场景中,用来实现"连接池"/"任务worker池"等,大家常用的dbcp数据库连接池,也是基于commons-pool实现. commons-pool实现思想非常简单,它主要的作用就是将"对象集合"池化,任何通过pool进行对象存取的操作,都会严格按照"pool配置"原创 2016-04-28 09:57:29 · 3531 阅读 · 0 评论 -
服务器端select I/O多路复用模型
服务器Select模型的实现标签: 服务器socketmakefilestreamnullnetwork服务器Select模型的实现讨论新闻组及文件select模型属于网络的I/O复用模型,比纯粹的阻塞I/O模型更具有实用性,因为可以同时等待多个描述字的就绪。当年学习C/C++的时候,很少碰到底层以数字标示的描述字,只在写文件系统的去尝试各种情况,以获得最佳效率的时候实际尝试使用过一转载 2016-04-28 09:47:12 · 442 阅读 · 0 评论 -
DLL学习
DLL的优点简单的说,dll有以下几个优点:1) 节省内存。同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中。如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,像dll中的全局变量这种东西是会被每个进程复制一份的)。2) 不需编译的软件系统升级,若一个软件转载 2016-03-25 17:09:31 · 599 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
图的深度优先遍历和广度优先遍历图的深度优先遍历和广度优先遍历 图的深度优先遍历和广度优先遍历 图的深度优先遍历:V1 V2 V4 V8 V5 V3 V6 V7图的广度优先遍历:V1 V2 V3 V4 V5 V6 V7 V8#include#include#includeusing namespace std;struct _ArcInfo{转载 2015-12-09 16:41:05 · 1138 阅读 · 0 评论 -
C/C++中时间处理函数
C time库中提供了几个时间处理的函数:获取时间clock 获取程序从开始到调用clock硬件滴答数difftime 获取两个时间的差time 获取当前时间转换时间mktime 将tm结构转换成time_tasctime 将tm结构转换成stringctime 将time_t转换成stringgmtime 将time_t转换成tm结构(UTC时间)localtime 将t转载 2015-12-04 13:22:34 · 511 阅读 · 0 评论 -
数据库中空字符串和NULL两个概念值的区别
数据库中的NULL表示“没有对(列)变量输入数据”,即在数据库中的NULL可以区分“没有对(列)变量输入数据”和“有对(列)变量输入数据”这两类情况。而输入空字符串,则是这里的“有对(列)变量输入数据”这一类情况,即有输入数据,只是输入的数据为空字符串(含有终止符的还是)。从这个意义上讲,如int t;语句,也是属于这里的“有对(列)变量输入数据”这一类情况,只是不是有程序员自己输入值,而是由(编转载 2015-12-04 12:06:51 · 5152 阅读 · 0 评论 -
表达式的前中后缀表示和表达式运算
一、将自然表达式转换为前/中/后缀表达式,首先按照自然表达式中操作数和操作符的优先级顺序构造出表达式对应的二叉树,然后对二叉树进行前序/中序/后序遍历,即得到前/中/后缀表 达式 二、一些其他的遍历原则: 1、深度优先遍历: 首先访问出发点V,并将其标记为已访问过;然后依次从V出发搜索V的每个邻接点W。若W未曾访问过,则以W为新的出发点继续进行深度优先遍历,直原创 2015-12-02 11:20:52 · 699 阅读 · 0 评论 -
全面介绍Windows内存管理机制及C++内存分配实例
转自:http://blog.csdn.net/yeming81/article/details/2046193本文基本上是windows via c/c++上的内容,笔记做得不错。。本文背景:在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。本文目的:对转载 2015-11-30 12:35:35 · 1008 阅读 · 0 评论 -
常用几种设计模式
1 单例模式 允许自由创建每个类没有实际意义,还有可能造成系统性能下降 优势:减少创建java实例带来的系统开销 便于系统跟踪某个实例的生命周期,实例状态等 2 工厂模式: 工厂模式又分简单工厂模式,抽象工厂模式 使用简单工厂模式的优势是:让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对原创 2015-09-13 17:25:55 · 798 阅读 · 0 评论 -
利用深度搜索法解决八皇后问题
八皇后问题每行必须有一个皇后,所以,对棋盘深搜时,第一个皇后的位置不妨设为第一行,这样只对第一行进行搜索,同理,第二个皇后不妨设为第二行,以此类推。下面附我的代码:#includeusing namespace std;struct node1{bool b[8][8]; };//棋盘模拟,不可以放皇后的地方值为0,可以为1;struct node2{ int x,y;转载 2015-09-13 11:40:40 · 1965 阅读 · 0 评论 -
ASCII,UTF-8,Unicode字符串相互转换(转)
#include #include #include using namespace std; //utf8 转 Unicode std::wstring Utf82Unicode(const std::string& utf8string) { int widesize = ::MultiByteToWideChar(CP_UTF8, 0,转载 2016-05-04 11:11:25 · 1840 阅读 · 0 评论 -
调用COM组件的方法
需求:1.创建myCom.dll,该COM只有一个组件,两个接口: IGetRes--方法Hello(), IGetResEx--方法HelloEx()2.在工程中导入组件或类型库clip_image001 #import "组件所在目录myCom.dll" no_namespace或clip_image001 #import "类型库所在目录myCom.tlb"cl原创 2016-04-22 14:04:52 · 2317 阅读 · 0 评论 -
COM组件的AddRef和Release()方法使用
AddRef和Release实现的是一种名为引用计数的内存管理技术,这种技术是使组件能够自己将自己删除的最简单同时也是效率最高的方法。COM组件将维护一个称作是引用计数的数值。当客户虫组件取得一个接口时,此数值增1,当客户使用完某个接口后,此数值将减1。当此数值为0时,组件即可将自己从内存中删除。 为正确的使用引用计数,需要了解一下三条规则: (1)在返回之前调用AddRef。对于哪些原创 2016-04-22 14:42:56 · 5728 阅读 · 0 评论 -
QT View及Model源码解析
QT View及Model源码解析QT的Model用于保存数据,而QTView只是用于显示界面,大概关系如下,View的数据private中一般会有drawcell等方法,用于从model里面取数据绘制文字,表格,绘制的时候会根据每个QModelIndex的flag属性来进行不同绘制,所以如果我们继承了flag并且设置特殊的role角色,会改变绘制的效果,当然我们也可以直接通过setflag也是原创 2016-09-01 14:25:18 · 2128 阅读 · 0 评论 -
Qt图形框架资料01
这个框架是一个相对成熟的渲染引擎的上层框架,通常也可以会叫做 Scene - View。在QT中,GraphicsView是一个与QWdiget系列一点点不一样的系统。这个系统主要由下面几个框架类构成:QGraphicsView, QGraphicsScene, QGraphicsItem QGrahpicsView是从原生的QWidget继承过来,QGraphics-View系统转载 2016-08-20 18:00:35 · 1444 阅读 · 0 评论 -
windows进程间各种通信方式浅谈
1 Windows进程间通信的各种方法 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。 多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API) 提供了大量支持应用程序间数据共享和交换的机制,这些转载 2016-07-29 14:34:28 · 975 阅读 · 0 评论 -
设计模式之观察者模式实例
#include "stdafx.h" #include #include using namespace std; /* 观察者 */ class IObserver { public: IObserver(){} virtual ~IObserver(){} virtual void update() = 0原创 2016-07-29 10:17:23 · 572 阅读 · 0 评论 -
模块接口间三中调用方式
异步消息的传递-回调机制软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用原创 2016-07-27 14:06:40 · 6131 阅读 · 0 评论 -
C++中各大库扥介绍
C++各大有名库的介绍在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比较著名的大型库。1、C+原创 2016-07-13 09:30:35 · 1163 阅读 · 1 评论 -
临界区和互斥量的区别
1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进转载 2016-07-23 15:04:35 · 8667 阅读 · 0 评论 -
windiws C++ 多线程编程
C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下: 创建线程的函数HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize,原创 2016-07-11 11:33:50 · 489 阅读 · 0 评论 -
通过RAII机制实现资源的自动释放
利用RALL机制使用模板技术蒋某中类型的指针封装在RALL类的临时对象中避免指针在被使用的过程中发生异常,通过私有继承避免RALL的被复制和拷贝举个常见的例子:[cpp] view plain copyvoid Func() { FILE *fp; char* filename = "test.txt"; if((fp=fopen(filename,"r"))=转载 2016-04-23 21:15:25 · 921 阅读 · 0 评论 -
C++异常处理第四篇 Loki::ScopeGuard
转载:神奇的Loki::ScopeGuard 2011-07-05 12:52:05分类: C/C++转载:http://blog.csdn.net/fangqu/article/details/4242245----------------------------------------------------------------------------------------作者:转载 2016-04-23 20:57:01 · 704 阅读 · 0 评论 -
C++中接口与实现的分离技术
lxImplement.h文件内容:#include "lxTest.h"class ClxImplement {public: ClxImplement(); ~ClxImplement(); void DoSomething();private: ClxTest m_lxTest; void lxTest();}; lxI转载 2016-04-22 17:55:29 · 434 阅读 · 0 评论 -
C++多重继承通过中间类继承重写不同基类中相同类型的虚函数
class CBaseA{public: virtual void TestA();};class CBaseB{public: virtual void TestB();};class CDerived : public CBaseA, public CBaseB{public: virtual void TestA(); // 重写基类CBaseA中原创 2016-04-22 16:57:57 · 1102 阅读 · 0 评论 -
关于虚基类指针向派生类指针转化
#include using namespace std;class base1 { public: base1(){cout<<"base::base()!"<<endl;} void virtual printBase(){cout<<"base::printBase()!"<<endl;} }; class derived1: virtual原创 2016-04-22 16:29:12 · 1908 阅读 · 0 评论 -
C++ 常用类型转换的区别
static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较(使用vs2010所带的编译器) 转载请注明来源 http://www.cnblogs.com/jerry19880126/ 隐式转换(implicit conversion)short a=2000;int b;b=a;short是两字节,int是四字节,由转载 2016-04-22 15:53:30 · 518 阅读 · 0 评论 -
C++中虚析构函数的作用
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout << "Do somethi转载 2016-04-22 15:10:29 · 331 阅读 · 0 评论 -
简单工厂模式和工厂方法模式
在OO设计领域,我们知道前人总结了不少的经验,许多的经验在现代软件工程过程中已经被认为是原则来遵守。下面笔者摘抄几项下文涉及到的OO原则的定义。OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。我的理解是,对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进行。DIP(依赖倒转原则,Dependence Inversio转载 2015-09-13 17:06:55 · 1048 阅读 · 0 评论 -
关于函数返回值为引用和指针的问题
如果函数的返回值为引用,则不需要创建无名临时对象,避免构造函数和析构函数的调用,从空间和时间上提高了程序执行的效率 返回值为引用的情况。 #include #include using namespace std; char & get_value(string &str,int i)原创 2015-09-13 13:29:36 · 1806 阅读 · 0 评论 -
如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为O(n)
由于数组中元素是按递增顺序排列,因此你可以从两端开始寻找减少比较次数 ,时间复杂度为O(1).#includeusing namespace std;bool find(int data[], int length, int num, int &num1, int &num2){ int head = 0; int tail = length - 1; while (head !=原创 2015-10-17 22:57:18 · 2594 阅读 · 0 评论 -
遇到sizeof(struct)怎么计算?
1、 sizeof应用在结构上的情况请看下面的结构:struct MyStruct{ double dda1; char dda; int type;};对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求:sizeof(MyStruct)=sizeof(double) sizeof(char)转载 2015-04-08 10:26:31 · 1298 阅读 · 0 评论 -
C++中继承会破坏封装吗?
类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变父类的实现。但是类继承也有一些不足之处。首先,因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现。更糟的是,父类通常至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为。如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。 第一个例子,我原创 2015-04-14 16:15:49 · 1379 阅读 · 0 评论 -
当父类指针指向子类对象时的函数调用
class A{public: void FuncA() { printf( "FuncA called\n" ); } virtual void FuncB() { printf( "FuncB called\n" ); }};class B : public A{public: void FuncA() { A::FuncA();原创 2015-04-14 16:37:05 · 7388 阅读 · 0 评论 -
经典面试题(二)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
1.正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12(1)、设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项(2)、设计测试数据来验证函数程序在各种输入下的正确性。 感觉有点类似归并排序的Merge。有两个数组A、转载 2015-04-22 19:39:45 · 693 阅读 · 0 评论