C++
文章平均质量分 87
勇-子
这个作者很懒,什么都没留下…
展开
-
Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。Snowflake算法核心把时间戳,工作机器id,序列号组合在一起。 除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定。默认情况下41...原创 2018-03-16 15:10:35 · 754 阅读 · 0 评论 -
二叉树的建立及递归遍历
#include#include#include//定义节点 typedef struct BiNode{ char data; struct BiNode *lch; struct BiNode *rch;}BiNode,*BiTree;//先序拓展序列建立二叉树 void Create(BiTree &T){原创 2012-06-06 09:06:27 · 979 阅读 · 0 评论 -
万年历源码
// 万年历.cpp : Defines the entry point for the console application.// 显示1900年以后任何年份的日历,日历以月份顺序排列,每月以星期顺序排列。//采用一般日历计算方法,先给出一般年份的每月天数,如果是闰年,第二个月天数为29,再计算出制定年份的1月1日是星期几,然后根据这些数据//计算出全年日历,边计算边显示。//函数le原创 2012-06-04 11:09:40 · 1576 阅读 · 1 评论 -
关于C\C++语言中的结构体对齐
关于C语言中的结构体对齐。 (1)什么是字节对齐 一个变量占用 n 个字节,则该变量的起始地址必须能够被 n 整除,即: 存放起始地址 % n = 0, 对于结构体而言,这个 n 取其成员种的数据类型占空间的值最大的那个。 (2)为什么要字节对齐 内存空间是按照字节来划分的,从理论上说对内存空间的访问可以从任何地址开始,但是在实际上不同架构的CPU为了提高访问内存的速度,原创 2012-05-14 11:14:01 · 843 阅读 · 0 评论 -
STL中基本容器string,vector,list,deque之间的区别
在STL中基本容器有: string、vector、list、deque。set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问;set: 集合, 用来判断某一个元素是不是在一个组里面,使用的比较少;map: 映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了;底层采用的是树型结构,多数使用平衡二叉树(RB-Tree)实现,查找某一原创 2012-05-30 16:01:51 · 841 阅读 · 0 评论 -
VS2010 创建和调用动态链接库
创建新的动态链接库 (DLL) 项目1.从“文件”菜单中,选择“新建”,然后选择“项目…”。2.在“项目类型”窗格中,选择“Visual C++”下的“Win32”。3.在“模板”窗格中,选择“Win32 控制台应用程序”。4.为项目选择一个名称,如 MathFuncsDll,并将其键入“名称”字段。 为解决方案选择一个名称,如 DynamicLibrary,并将其键入原创 2012-05-04 15:06:20 · 21868 阅读 · 7 评论 -
CFileDialog的各种风格的目录/文件夹选择对话框---(CFolderDialog)
1. 标准的文件夹选择对话框:可以使用在非MFC程序中,调用的标准API SHBrowserForFolder。源码:#include "shlobj.h" #include // Function name : GetFolder // Description : Open and get Folder Dialog. // Retur原创 2012-04-01 08:59:57 · 6331 阅读 · 4 评论 -
在mfc中调用选取路径对话框
CString sFolderPath; BROWSEINFO bi; TCHAR Buffer[MAX_PATH]; //初始化入口参数bi开始 bi.hwndOwner = NULL; bi.pidlRoot =NULL;//初始化制定的root目录很不容易, bi.pszDisplayName = Buffer;//此参数如为NULL则不能显示原创 2012-03-21 16:52:58 · 2539 阅读 · 0 评论 -
MFC 多线程及线程同步
一、MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API原创 2012-03-27 17:04:46 · 1161 阅读 · 0 评论 -
Visual C++文件后缀名释义
[1] .APS:存放二进制资源的资源辅助中间文件(可加快资源装载速度)。[2] .BMP:位图资源文件。[3] .BSC:浏览信息文件。由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位。可在project options里去掉Generate Browse Info File,这样可加快编译进度。[原创 2012-04-16 13:32:05 · 1386 阅读 · 0 评论 -
STL--stack/queue的使用方法
stack(栈)和queue(队列)也是在程序设计中经常会用到的数据容器,STL为我们提供了方便的stack(栈)的queue(队列)的实现。准确地说,STL中的stack和queue不同于vector、list等容器,而是对这些容器的重新包装。这里我们不去深入讨论STL的stack和queue的实现细节,而是来了解一些他们的基本使用。1、stackstack模板类的定义在原创 2012-06-07 17:06:40 · 1111 阅读 · 0 评论 -
Visual Studio 2010 如何改用 Beyond Compare 作为 TFS 的比较工具
Beyond Compare 是一套非常实用的文件及文件夹比较软件,不仅可以快速比较出两个文件夹的不同之处,还可以详细的比较文件之间的内容差异。最近改用 TFS 进行版本控管之后,说实在的还是习惯使用Beyond Compare来做差异比较,也因此研究了一下设定的方法,以下是设定的方法笔记。开启 Visual Studio 2010的 [工具] /[选项] / [源代码管理] /[Vi原创 2012-08-20 09:48:48 · 10852 阅读 · 4 评论 -
/将CString(Unicode) 转成 char 以下可转中文
//将CString(Unicode) 转成 char 以下可转中文char* CStringToCharArray(CString str){char *ptr;#ifdef _UNICODELONG len;len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);ptr = new char [len+原创 2013-03-27 11:20:52 · 1087 阅读 · 0 评论 -
sqlserver xml语句入门
1、xml: 能认识元素、属性和值 2、xpath: 寻址语言,类似windows目录的查找(没用过dir命令的话就去面壁) 语法格式,这些语法可以组合为条件: " ." 表示自己," .." 表示父亲," /" 表示儿子," //" 表示后代, " name" 表示按名字查找," name"原创 2012-11-14 09:57:37 · 1736 阅读 · 0 评论 -
SAX解析XML文档对于carriage return,line feed,tab,space 处理过程:
SAX解析XML文档对于carriagereturn,line feed,tab,space 处理过程: 测试数据: 测试输出: xAx9 xAx9 xAx9 xAx9原创 2012-11-08 10:30:52 · 1058 阅读 · 0 评论 -
Multimap
声明multimap authors;元素的添加//adds first element with key Barthauthors.insert(make_pair(string(“Barth, John”),string(“Sot-Weed Factor”)));//ok: adds second element with keyBarthauthors.inse原创 2012-09-12 09:06:38 · 1344 阅读 · 0 评论 -
assert的使用
建议在以下情况使用assert1、函数指针入参,如果在函数里直接使用的话要保证指针不为NULL2、保证除数不为03、在内存申请后要确保申请成功4、函数的返回值和出参,要保证其值不会导致系统崩溃原创 2012-09-06 18:12:46 · 639 阅读 · 0 评论 -
删除某路径下的物理文件 C++实现
void deldir(CString dir) { WIN32_FIND_DATA Sr; HANDLE Handle; int iattr; //如果是目录 iattr=GetFileAttributes(dir); if(iattr==FILE_ATTRIBUTE_DIRECTORY) { try { Handle=::FindFirstF原创 2012-08-27 20:13:59 · 1353 阅读 · 0 评论 -
VC++6.0 VS 插件系列(绝对经典)
Visual C++ 插件系列介绍说到Visual C++的插件,大家可能只有想到Visual Assist吧。天真!行内开发的插件可只有这个!?下面介绍一下vc6.0的其他插件。Visual Assist(强烈推荐)网址:http://www.wholetomato.com/ 功能:VA从5.0一直到现在的VAX,功能越来越强大,除了以前版本中的自动识别各种关键字,系统函数,成员变量,自动给原创 2011-01-06 16:50:00 · 9624 阅读 · 1 评论 -
XML CDATA 以及转意字符
解析数据XML 解析器通常情况下会处理XML文档中的所有文本。当XML元素被解析的时候,XML元素内部的文本也会被解析:This text is also parsedXML解析器这样做的原因是XML元素内部可能还包含了别的元素,象下面的例子,name元素内部包含了first和last两个元素:BillGates原创 2012-08-20 11:26:36 · 3541 阅读 · 0 评论 -
Vs2010连接Mysql数据库方法
------------------------------------------- 操作系统:winxp-32bit 数据库:MySQL Server 5.5 (安装路径:D:\ProgramFiles\MySQL\MySQL Server 5.5) IDE: Microsoft Visual Studio 2010 untimate/Professional (以上东西都原创 2012-08-20 09:41:39 · 52057 阅读 · 4 评论 -
笔试题总结
1、ASSERT与VERIFY的有什么 相同 和不同呢 1 ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。2 ASSERT与VERIFY宏在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY计算表达式的值,但不管值为0还是非0都原创 2012-02-14 10:38:38 · 778 阅读 · 0 评论 -
VC6.0下开发的程序在64位机器上运行
本文一步一步地描述了怎样使用Microsoft Visual Studio IDE创建64位应用程序, 并且,64位的应用程序代码和32位应用程序代码完全一样, 只是编译环境配置有所不同。目前还没有发现有纯64位的IDE应用程序开发环境。笔者翻译本文时,Microsoft已在VS.NET2002/2003/2005/2008 IDE中提供了64位创建环境 ,但完全的64位IDE开发环境似乎还没有。原创 2012-02-24 14:21:36 · 10034 阅读 · 1 评论 -
高质量编程--C++函数的高级特性
<br />对比于C语言的函数,C++增加了重载(overloaded)、内联(inline)、const和virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const与virtual机制仅用于类的成员函数。<br />重载和内联肯定有其好处才会被C++语言采纳,但是不可以当成免费的午餐而滥用。本章将探究重载和内联的优点与局限性,说明什么情况下应该采用、不该采用以及要警惕错用。 <br /> 8.1 函数重载的概念<br /> <br /> 8.1.1 重载的起源<br />原创 2010-12-27 17:56:00 · 682 阅读 · 0 评论 -
C++ STL学习
C++的标准模板库(Standard Template Library,简称STL)是一个容器和算法的类库。容器往往包含同一类型的数据。STL中比较常用的容器是vector,set和map,比较常用的算法有Sort等。 <br />一. vector 1.声明: 一个vector类似于一个动态的一维数组。<br />vector<int> a; //声明一个元素为int类型的vector a vectot<MyType> a; //声明一个元素为MyType类型的vector a 这里的声明的a包含0个原创 2010-12-27 17:54:00 · 627 阅读 · 0 评论 -
STL中 MAP的使用
<br />Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。<br />下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的学号跟他的姓名就原创 2010-12-17 17:20:00 · 491 阅读 · 0 评论 -
WinAPI--Win32 系统入口函数介绍
WinMain函数<br /><br />WinMain函数的原型声明如下:<br />int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow );<br />参数:<br />WinMain函数接收4个参数,这些参数都是在系统调用WinMain函数时,传递给应用程序的。<br />hInstance:<br />表示该程序当前运行的实例句柄,是一个数值标识。当程序在Windo原创 2010-11-29 11:34:00 · 916 阅读 · 0 评论 -
多线程的总结
1、进程是一个正在运行的应用程序的实例,他属于系统内核对象;2、当创建一个进程的时候,同时系统会自动为其创建一个线程,该线程称之为主线程;3、创建线程的方法: 1、 CreatThread(); 2、 _beginthreadex(); 3、 AfxBeginThtread();注: MFC提供了CWinThread 类封装了对线程的支持。4、应用MFC 类库创建线程 1、m_bAutoDelete 线程终止时,线程对象是否自动被释放。 2、m_hTread 表示线程对象关原创 2010-09-17 10:40:00 · 596 阅读 · 0 评论 -
VC中定义全局变量
1 VC中如何定义全局变量<br /><br />答:<br /> 放在任意文件里 <br /> 在其他文件里用 extern 声明 <br /> 或者在App类中声明一个公有成员 <br /> 在程序其它类中可以用 <br /> AfxGetApp() 得到一个App对象指针,将它转化成你的App类指针 <br /> 然后就可以通过指针->变量使用了 <br /> 还有就是在 <br /> MFC中定义只有静态成员的类 到时候直接应用就可以了,还不<br /> 破坏结构<br /><br原创 2010-09-15 12:00:00 · 1655 阅读 · 1 评论 -
OnPaint和OnDraw的区别
<br />问题:我在视图画的图象或者文字,当窗口改变后为什么不见了?OnDraw()和OnPaint()两个都是解决上面的问题,有什么不同?<br />答:OnDraw()和OnPaint()好象兄弟俩,因为它们的工作类似。<br />至于不见了的问题简单,因为当你的窗口改变后,会产生无效区域,这个无效的区域需要重画。一般Windows会发送两个消息WM_PAINT(通知客户区 有变化)和WM_NCPAINT(通知非客户区有变化)。非客户区的重画系统自己搞定了,而客户区的重画需要我们自己来完成。这就需要O转载 2010-09-01 14:55:00 · 689 阅读 · 0 评论 -
MFC之口重绘
<br />MFC提供了三个函数用于窗口重绘<br />InvalidateRect(&Rect)<br />Invalidate()<br />UpdateWindow()<br />当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和WM_NCPAINT(通知非客户区有变化)<br />--WM_NVPAINT系统会自己搞定<br />--WM_PAINT消息对应的函数是OnPaint(),它是系统默认的接受WM_PAINT消息的函数,但我们一般在程序中做重绘时都在On原创 2010-09-01 12:22:00 · 901 阅读 · 0 评论 -
使用const 提高函数的健壮性
<br />看到 const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件<br />反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的<br />魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。<br />const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保<br />护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Use<br />const wheneve原创 2010-08-20 09:41:00 · 655 阅读 · 0 评论 -
将16进制的字符串以10进制的方式输出
<br />int Hex2Dec(LPSTR s)<br />{<br /> int d,i; <br /> for(i=0;i<strlen(s);i++) //判断是否为正确的十六进制串,不是返回-1<br /> {<br /> if(s[i]>='0' && s[i]<='9' || s[i]>='a' && s[i]<='f' || s[i]>='A' && s[i]<='F' ){}<br /> else { return -1; }<br /> }<br />原创 2010-11-04 16:17:00 · 855 阅读 · 0 评论 -
使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast
<br />1 、static_cast 用法: <br />static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。 <br />它主要有如下几种用法: <br />①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。 <br />②用于基本数原创 2011-02-24 14:11:00 · 532 阅读 · 0 评论 -
VC_CString_用法
<br />1.CString::IsEmpty <br />BOOL IsEmpty( ) const; <br />返回值:如果CString 对象的长度为0,则返回非零值;否则返回0。 <br />说明:此成员函数用来测试一个CString 对象是否是空的。 <br />示例: <br />下面的例子说明了如何使用CString::IsEmpty。 <br />// CString::IsEmpty 示例 <br />CString s; <br />ASSERT( s.IsEmpty() ); <b原创 2011-03-30 14:51:00 · 828 阅读 · 0 评论 -
常用排序算法总结
常用排序算法,并说明其时间复杂度思想。 冒泡排序:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。算法时间复杂度是O(n^2)。 选择排序:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完,算法复杂度是O(n^2)。 插入排序:每次将一个待排序的数据原创 2012-02-15 10:40:40 · 863 阅读 · 0 评论 -
C/C++中指针和引用之相关问题研究
一、基本知识指针和引用的声明方式:声明指针: char* pc;声明引用: char c = 'A' char& rc = c;它们的区别:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改原创 2012-02-09 15:21:14 · 901 阅读 · 1 评论 -
C++多继承中重写不同基类中相同原型的虚函数
在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数。下面就是一个例子:class CBaseA{public: virtual void TestA();};class CBaseB{public: virtual void TestB();};class CDerived : public CBaseA, public CBaseB{publ原创 2012-02-08 09:19:08 · 1393 阅读 · 2 评论 -
堆、栈的一点小建议
堆(HEAP):NEW的东西在这里;New分配内存时是在整个进程的内存空间分配,就是分配给这个进程的物理内存+虚拟内存(32位4G),所以地址不连续;超过4G就崩了;速度慢,如果碰到需要从硬盘交换数据速度更慢;需要自己delete,麻烦;安全,一般不会撑爆进程的地址空间; 栈(STACK):局部的东西在这里nStackSizeSpecifies the原创 2012-02-08 09:11:37 · 686 阅读 · 0 评论 -
VC常用的辅助工具集
VC常用工具集合.带下载链接. 觉得不错, 转发给大家.但没有测试过.插件有风险, 安装需谨慎!转自 :http://blog.csdn.net/liquanhai/article/details/72150451. IDE:钟情于VC++6.0,但是也感觉Visual Studio2008和2010的强大,可能迟早得转到VS高版本上来。在安装VC++6.0的转载 2012-02-08 09:12:34 · 1493 阅读 · 0 评论