- 博客(30)
- 资源 (18)
- 收藏
- 关注
转载 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
<br />Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 <br /> Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。<br />其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短
2011-01-20 23:47:00 13843
转载 c++实现反射
链接:http://gdliuyidang.javaeye.com/blog/632077天生限制 <br />C++语言本身不支持反射机制,但C++对象总是要序列化的,序列化就是存储到磁盘上,将对象变成一定格式的二进制编码,然后要用的时候再将保存在磁盘上的二进制编码转化成一个内存中的对象,这个过程中总是需要有一个指示来告诉编译器要生成什么样的对象,最简单的方式当然就是类名了,例如:将一个ClassXXX对象存储到磁盘上,再从磁盘读取的时候让编译器根据“ClassXXX”名称来new一个对象。 <br />
2011-01-16 01:51:00 684
转载 细说UI线程和Windows消息队列
<br /><br />细说UI线程和Windows消息队列<br /> <br />注:<br /> <br /> 由于本人对Windows底层机理了解不深,本文如有错误,敬请指正。<br /> <br /> 金旭亮<br /> <br /> <br /> <br />================================================<br /> <br /> 在Windows应用
2011-01-16 00:46:00 443
转载 vc++多线程编程
<br />链接:http://feihen.javaeye.com/blog/859545<br />多线程编程之一——问题提出<br /><br />一、问题的提出<br />编写一个耗时的单线程程序:<br /> 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: <br />void CSingleThreadDlg::OnSl
2011-01-10 22:27:00 659
转载 RTTI运行时对象识别
<br />链接:http://sealbird.javaeye.com/blog/866864<br />作者:NorthTibet <br /><br /><br /><br /> RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法。本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI;本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是
2011-01-10 22:16:00 345
转载 全面解析MFC应用程序中处理消息的顺序 (转)
<br /><br /> 1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc <br />2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数 <br />3.WindowProc() 该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数 <br />4.OnWndMsg()
2011-01-04 23:49:00 390
转载 C++项目中的 extern "C"{}(转)
<br />引言 <br /><br />在用C++的项目源码中,经常会不可避免的会看到下面的代码: <br /><br />1 <br />#ifdef __cplusplus <br />2 <br />extern "C" { <br />3 <br />#endif <br />4 <br /><br />5 <br />/*...*/ <br />6 <br /><br />7 <br />#ifdef __cplusplus <br />8 <br />} <br />9 <br />#
2011-01-04 23:48:00 365
转载 MFC中获取各种类指针(转)
<br /><br /> 1、获取应用程序指针<br /> CMyApp* pApp=(CMyApp*)AfxGetApp();<br /> <br />2、获取主框架指针<br /> CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针<br /> CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);<br /> 或者<br /> CMainFrame* pMainFrame = (CMainFra
2011-01-04 23:46:00 474
转载 VC++文件操作(转)
<br /><br />文件属性相关<br />1.判断文件是否存在<br />利用CFile类和CFileStatus类判断<br />CFileStatus filestatus;<br />if (CFile::GetStatus(_T("d://softist.txt"), filestatus))<br /> AfxMessageBox(_T("文件存在"));<br />else<br /> AfxMessageBox(_T("文件不存在"));<br />利用C
2011-01-04 23:44:00 691
转载 C++内存池实现实例(转)
<br /><br /><br />本节分析在某个大型应用程序实际应用到的一个内存池实现,并详细讲解其使用方法与工作原理。这是一个应用于单线程环境且分配单元大小固定的内存池,一般用来为执行时会动态频繁地创建且可能会被多次创建的类对象或者结构体分配内存。<br />本节首先讲解该内存池的数据结构声明及图示,接着描述其原理及行为特征。然后逐一讲解实现细节,最后介绍如何在实际程序中应用此内存池,并与使用普通内存函数申请内存的程序性能作比较。<br /><br />内存池类MemoryPool的声明如下:<br /
2011-01-04 23:42:00 819
转载 走出MFC窗口子类化的迷宫
<br /> 走出MFC窗口子类化的迷宫 收藏<br />MFC向导生成的对话框为模态对话框,当我们在资源编辑器中向对话框拖拽一个按钮IDC_BTN时,其布局信息将同步反映在DlgDemo.rc资源脚本文件中。<br />// DlgDemo.rc<br />IDD_MY_DIALOG DIALOGEX 0, 0, 320, 201<br />STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU<br />EXSTYLE
2011-01-03 23:51:00 534
转载 走出MFC窗口子类化的迷宫
<br /> 走出MFC窗口子类化的迷宫 收藏<br />MFC向导生成的对话框为模态对话框,当我们在资源编辑器中向对话框拖拽一个按钮IDC_BTN时,其布局信息将同步反映在DlgDemo.rc资源脚本文件中。<br />// DlgDemo.rc<br />IDD_MY_DIALOG DIALOGEX 0, 0, 320, 201<br />STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU<br />EXSTYLE
2011-01-03 23:51:00 648
转载 走出MFC窗口子类化的迷宫
<br /> 走出MFC窗口子类化的迷宫<br />MFC向导生成的对话框为模态对话框,当我们在资源编辑器中向对话框拖拽一个按钮IDC_BTN时,其布局信息将同步反映在DlgDemo.rc资源脚本文件中。<br />// DlgDemo.rc<br />IDD_MY_DIALOG DIALOGEX 0, 0, 320, 201<br />STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU<br />EXSTYLE WS
2011-01-03 23:51:00 912
转载 走出MFC窗口子类化的迷宫
<br /> 走出MFC窗口子类化的迷宫 收藏<br />MFC向导生成的对话框为模态对话框,当我们在资源编辑器中向对话框拖拽一个按钮IDC_BTN时,其布局信息将同步反映在DlgDemo.rc资源脚本文件中。<br />// DlgDemo.rc<br />IDD_MY_DIALOG DIALOGEX 0, 0, 320, 201<br />STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU<br />EXSTYLE
2011-01-03 23:51:00 418
转载 走出MFC窗口子类化的迷宫
<br /> 走出MFC窗口子类化的迷宫 收藏<br />MFC向导生成的对话框为模态对话框,当我们在资源编辑器中向对话框拖拽一个按钮IDC_BTN时,其布局信息将同步反映在DlgDemo.rc资源脚本文件中。<br />// DlgDemo.rc<br />IDD_MY_DIALOG DIALOGEX 0, 0, 320, 201<br />STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU<br />EXSTYLE
2011-01-03 23:49:00 501
转载 走出MFC窗口子类化的迷宫
<br /> 走出MFC窗口子类化的迷宫 收藏<br />MFC向导生成的对话框为模态对话框,当我们在资源编辑器中向对话框拖拽一个按钮IDC_BTN时,其布局信息将同步反映在DlgDemo.rc资源脚本文件中。<br />// DlgDemo.rc<br />IDD_MY_DIALOG DIALOGEX 0, 0, 320, 201<br />STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU<br />EXSTYLE
2011-01-03 23:48:00 838
转载 走出MFC窗口子类化的迷宫
<br /> 走出MFC窗口子类化的迷宫 收藏<br />MFC向导生成的对话框为模态对话框,当我们在资源编辑器中向对话框拖拽一个按钮IDC_BTN时,其布局信息将同步反映在DlgDemo.rc资源脚本文件中。<br />// DlgDemo.rc<br />IDD_MY_DIALOG DIALOGEX 0, 0, 320, 201<br />STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU<br />EXSTYLE
2011-01-03 23:47:00 506
转载 为什么拷贝构造函数必须为引用传递,不能是值传递?
<br />拷贝构造函数的标准写法如下:class Base<br />{<br />public:<br /> Base(){}<br /> Base(const Base &b){..}<br /> //<br />}<br /><br />上述写法见得最多,甚至你认为理所当然。<br />那么如果我们不写成引用传递呢,而是值传递,那么会怎样?class Base<br />{<br />public:<br /> Base(){}<br /> Base(const Base b){}<br
2011-01-03 23:43:00 590
原创 EndOfFile is not member of _Recordset的解释和解决方案
<br /> 在导入那个动态连接库的时候,编译器会为我们在Debug生成两个文件,msado15.dllh和msado15.tli。其中是一些类,函数的定义和实现。在用rename的时候实际上是去改了两个文件中的一些与EOF相关的函数和变量的名字(改成了你现在的名字)。那个错误的原因是你做了名字的改动,但是没有反应到那两个文件中去。或者那两个文件已经修改,但是没有加载到你的程序中来。那么解决的方法很简单,就是选择Build(编译)菜单中的Rebuild All,重新编译一下就可以了。
2011-01-03 23:29:00 1747 2
转载 Windows消息编程
<br />Windows消息编程韩耀旭 下载源代码 本文主要包括以下内容: 1、简单理解Windows的消息 2、通过一个简单的Win32程序理解Windows消息 3、通过几个Win32程序实例进一步深入理解Windows消息 4、队列消息和非队列消息 5、WM_COMMAND和WM_NOTIFY 6、MFC的消息映射 7、消息反射机制 1、简单理解Windows的消息 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。举个例子来说,鼠标单击某应用程序的一个按钮。这时,Windows
2011-01-03 23:08:00 453
转载 进程间通信 - 动态链接库实现
<br />引子<br />前面介绍的几种用于实现进程之间通信的方法都是比较正统的方式,<br />像剪贴板,命名管道这些都还是用得比较多的,<br />而这里将介绍的是一种比较偏门的方法来实现进程间的通信,<br />所谓偏门呢,自然就是用的少,能够不用就不要使用。<br />其实这种方法就是通过动态链接库来实现进程间的通信。<br /> <br /> <br />动态链接库(DLL)概述 <br />既然是要通过动态链接库来
2011-01-03 23:01:00 784
转载 进程间通信 - 剪贴板实现
<br />引子<br />由于在启动一个进程后,操作系统会给这个进程分配 4GB 的私有地址空间,至于为何有 4GB 这么大,<br />那得考虑进程的私有地址空间和实际物理内存地址空间之间的映射以及页交换等等细节问题了,这里不予讨论,<br />从名字就可以知道,既然操作系统给每一个进程分配的是私有地址空间,<br />自然,这段地址空间也只有这个进程自己才能访问了,不然还称为私有干吗呢?<br />既然这段私有地址空间只能由进程本身访问,那也就说明别的进程是不能够随意的访问这个进程的地址空间的,<br
2011-01-03 22:58:00 709
转载 进程间通信 - 邮槽实现
<br />引子<br />前面的一篇博文介绍了进程之间通信的一种最为简单的方式,<br />也就是在本地进程之间通过剪贴板来实现进程间通信,而剪贴板自有其缺陷,<br />很显然的是,剪贴板只能在本地机器上实现,<br />无法实现本地进程与远程服务器上的进程之间的通信,<br />那么有没有办法实现本地进程和远程进程的通信呢?<br />办法自然是有的,要是实在搞不出,<br />我拿 Socket 来实现本地进程和远程进程的通信来实现也是可以的,<br />但是你想啊,要用 Socket 来实现本地进
2011-01-03 22:57:00 525
转载 进程间通信 - 命名管道实现
<br />引子<br />好,到这里呢,就需要介绍实现进程间通信的第四种方式了,<br />也就是通过命名管道来实现,前面介绍的那三种方式呢,都是有缺陷或者说局限性太强,<br />而这里介绍的命名管道相对来说,在这方面就做得好很多了,<br />比如,剪贴板的话只能实现本机上进程之间的通信,<br />而邮槽的话虽然是可以实现跨网络之间的进程的通信,<br />但麻烦的是邮槽的服务端只能接收数据,邮槽的客户端只能发送数据,太悲剧了,<br />而对于匿名管道的话,其也只能实现本机上进程之间的通信,<br
2011-01-03 22:55:00 1282 1
转载 C++虚函数表解析(转)
<br />C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析
2011-01-02 23:32:00 348
转载 slice
代码class Base{<br />public:<br /> Base():m(0){};<br />//Base(const Base& rhs):m(rhs.m){cout<<"Copy constructor, rhs is "<<&rhs<<" this pointer is "<<this<<endl;}<br />void add(){m++;};<br />int m;<br />};<br />class Derived : public Base{};<br />int main
2011-01-02 23:31:00 317
转载 void指针
<br />指针有两个属性:指向变量 / 对象的地址和长度(长度也可以理解成大小)<br /> 但是指针只存储地址,长度则取决于指针的类型,编译器根据指针的类型从指针指向的地址向后寻址<br /><br />指针类型不同则寻址范围也不同,比如:<br />int*从指定地址向后寻找4字节作为变量的存储单元 <br />double*从指定地址向后寻找8字节作为变量的存储单元 <br /><br />1.void指针是一种特别的指针 <br /> void *vp <br /> //说它特别是因为它没有类
2011-01-02 23:18:00 343
转载 堆和栈的区别 (BY 任我行)
<br />非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别<br />一、预备知识—程序的内存分配<br />一个由c/C++编译的程序占用的内存分为以下几个部分<br />1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。<br />3、全局区(静
2011-01-02 23:16:00 369
转载 MFC 添加动态菜单
<br />动态创建一个右键菜单,将可供选择的各项列出来。<br />每个菜单项添加一个ID,因为弹出菜单有几项是不确定的,所以不能逐一添加菜单响应函数,而是将命令都映射到<br />如下类型的函数中,UINT nID为添加菜单项是设置的ID。依据该ID来判断用户点击的是哪个菜单项。<br /> void OnShowMember(UINT nID)view sourceprint?001// popMenuDlg.cpp : 实现文件 002// 003 004#include "stdafx.h"
2011-01-02 00:08:00 864
转载 钩子(转)
钩子(一)<br /> 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。<br /><br /> 基本概念:<br /> 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即
2011-01-01 23:51:00 634
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人