- 博客(53)
- 资源 (12)
- 收藏
- 关注
原创 迭代器和迭代器适配器---《C++标准程序库》读书笔记
迭代器是一个所谓的smart pointers。具有遍历复杂数据结构的能力,其下层运行机制取决于所遍历的数据结构。因此,每一种容器都必须提供自己的迭代器。事实上,每一种容器都将迭代器以嵌套的方式定义与内部,因此各种迭代器的接口相同,型别却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。 迭代器还有一个非常纯粹的理念:任何东西,只要其行为类似迭代器,
2013-11-02 11:01:43
3862
原创 STL空间配置器--《STL源码剖析》读书笔记
STL空间配置器(allocator)在所有容器内部默默工作,负责空间的配置和回收。STL标准为空间配置器定义了标准接口(可见《STL源码剖析》P43)。而具体实现细节则由各编译器实现版本而不同。下面介绍SGI STL中的allocator(实际叫alloc)配置器。文章末附SGI STL源码下载地址一个简单的allocator配置器首先我们来看一个SGI STL中符合标准,名为alloc
2013-10-15 13:21:23
2290
原创 POCO库 Foundation::Thread模块(二) 主动对象
Poco为使用者提供了一套基于多线程的主动对象,它通过使用多线程来搞笑地完成任务,而对于调用者却屏蔽了多线程的种种顾虑。甚至都看不出它使用了多线程的痕迹。Poco中对主动对象(activity)的介绍如下:
2013-09-25 10:59:38
5225
原创 HSV色彩空间
理解HSV色彩空间: HSV颜色模式是除了RGB颜色模式之外的另一种流行的颜色模式,RGB被广泛运用于计算机中,而HSV则用在电视显示方面。它更符合人们对颜色的描述(什么颜色(H),深浅度如何(S),亮度如何(V))。其实在电视机上菜单中的饱和度就是S,亮度就是V。 H:色相,色度,色彩,也就是我们平时说的颜色。如红,黄,洋红等。在HSV模型中,用度数描述,其中
2013-08-14 14:45:10
12941
原创 POCO库 Foundation::Thread模块 多线程与线程池支持
Thread类使用方法 在C++语言中,我们通过_beginThreadex或CreateThread来创建线程(最好使用前者,关于两者区别和线程基础知识可参见《Windows核心编程》),并且提供一个原型为void MyFunc(void pParam)入口函数来完成任务。在Poco中,将入口函数抽象为一个类Runnable,该类提供void run()接口,用户需要继承至
2013-08-09 15:20:06
11926
4
原创 POCO库 Foundation::SharedLibrary模块分析
Foundation中的SharedLibrary实现跨平台的dll动态加载。 具体使用方法和简介可见:ShareLibrary官方文档SharedLibrary导出函数 SharedLibrary类的简单用法 通过SharedLibrary可以实现函数导出和类导出,函数导出是最简单的,Dll提供方除了函数需要使用extern "C"声明之外,和普通C++编
2013-07-19 11:32:27
5976
1
原创 智能指针 auto_ptr
智能指针是对普通原指针的一种封装类,使得对原指针的管理变得更加简便和智能化。 总的来说它们主要为了解决这样一些问题: 1.显式分配资源后的释放问题,比如内存泄漏(new后忘了delete)。 2.资源的共享问题,当多个实例共享某个显式申请的资源(如内存)时,由谁来管理和释放该资源。 3.资源使
2013-07-10 08:40:09
1566
原创 C++ 内存分配(new,operator new)详解
讲述C++ new关键字和operator new, placement new之间的种种关联,new的底层实现,以及operator new的重载和一些在内存池,STL中的应用。
2013-07-09 14:55:55
84694
26
原创 Anagrams by Stack
// DJ.W 2013.4.20 //问题描述 : Anagrams by Stack// http://acm.suse.edu.cn/index.php?mod=problem&id=1056//算法思路: 用回溯法搜索//开发环境: vs2008#include "stdafx.h"#include using namespace std;#include#i
2013-04-20 10:53:49
989
原创 小数转分数
// 小数转分数.cpp : 定义控制台应用程序的入口点。///** DJ.W 2013.4.19* 问题描述:给定一个有限小数或无限循环小数,用分母最小的分数形式将其表示出来* 输入 :任意小数 循环节用()括起来 如: 1.33(3)* 输出 :4/3* 算法思想:《编程之美》P148* 提示; 设分数Y = 0.(c1c2c3...cm)* => Y = c
2013-04-19 19:29:54
1408
原创 关于字符编码以及%ls wsprintf setlocale 资料整理
这两天研究数据库,老是遇到宽字符的问题: 问题一:为什么在用wsprintf输出Unicode编码的字符串时要先调用setlocale(LC_ALL, "chs");而对于printf输出多字节编码的字符串则有无setlocale均可正常输出。 如: void main(){ wchar_t* wstr = L"中文"; setlo
2013-04-08 16:19:54
3276
原创 外星人计数
// 外星人计数法.cpp : 定义控制台应用程序的入口点。//DJ.W 2013.3.30/*问题描述: 下面是外星人计数和人类计数的对应 外星人计数 人类计数 1 1 12 2 21 3 123 4 132 5 213 6 231 7 312 8 321 9 1234 10 .... ... 要求
2013-03-31 10:53:51
1150
原创 简单游戏内存修改器
本实例通过对进程内存的查询和修改来实现简单内存修改器功能 点击选择打开进程列表 选择目标进程: 选择进程后,输入查找值,点击首次查找: 在出现的一系列满足条件地址中,如果无法识别要修改的地址,则可以在目标值变化后,跟踪查询该值。如在Mine.exe中,等剩余雷提示到39时,再输入39,点击累计查询:
2013-03-26 15:10:17
3426
原创 数组分割问题
// 数组分割.cpp : 定义控制台应用程序的入口点。////问题描述:将一个有2N个元素的数组分为两个元素个数为N的子数组,要求两子数组的和最接近//思路:《编程之美》P202 用动态规划得到2N个元素中任意N个元素能得到的所有和。再找出其中最接近sum/2的一个 设为x// 最后再通过一个动态规划算法找出和为x且个数为N的子数组#include "stdafx.h"#inc
2013-03-21 11:53:17
1187
原创 PE文件格式应用实例__为PE文件添加启动时对话框
本实例通过为修改目标PE文件内容来实现在该PE文件启动时,弹出一个对话框。对话框内容和标题由用户指定。 点击生成,在QQ.exe目录下有QQ_Box.exe。双击运行,弹出消息框: 点击确定,即开始运行QQ。 主要涉及到文件映射,虚拟地址空间,PE文件格式等知识; 为了让PE文件实现这一功能,我们在P
2013-03-17 21:22:25
3115
原创 星形密码探测器
功能:探测指定窗口的窗口信息和所在进程的必要信息,如果该窗口包含密码域,则获取该密码。 分析分为界面,窗口操作,DLL三个部分 界面:正常窗口透明窗口 控件颜色: 对话框的背景在相应WM_ERASEBKGND 的 OnEraseBkgnd中用指定背景位图通过PatBlt重绘。
2013-01-07 22:59:24
3539
原创 将邻接表表示的图转换为孩子兄弟法表示的二叉树
/* DJ.W 2012.12.06 代码功能: 将一个邻接表图转换为孩子兄弟法表示的二叉树*/#include #include using namespace std; //=====Queue=============================================================================================
2013-01-03 22:44:45
3597
原创 找出无序数组中最小的前k个数
/* DJ.W 2013.1.3 算法描述:找出一无序整型数组arr[n]中最小的前k个数 算法思路:为k个元素建一个大顶堆min[k],初始化为数组arr的前k个元素 调整这k个元素使其满足大顶堆性质 此时min[0]为大顶堆中最大的元素,依次用arr[j](k<=j<n)与min[0]相比较 如果arr[j]小于min[0] 则将min[0]换为arr[j]
2013-01-03 09:17:53
1619
原创 找出二叉树中所有累加值为给定值的路径
在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10
2012-12-28 21:13:15
961
原创 求数组最大连续元素之和
/*DJ.W 2012.12.27 代码功能: 输入: 一个整型数组 输出: 该数组能得到的最大连续元素和 如对输入 1 -2 -4 7 -6 9 最大连续元素和为10 (7 + (-6) + 9) 问题以及算法思想来自《编程珠玑(第二版)》P77 */#include using namespace std;#define max(a, b) (a>b? a:
2012-12-27 22:43:03
1131
原创 IO___C基础部分(EOF, 回车换行,getchar(), getch())
EOF EOF(End Of File)是文件读取操作所返回的一个状态,它并不是从文件中读取到的值,而是文件读取函数在读取到文件末尾或者不能再往下读取时的一个返回值。该返回值一般是-1,这也是大多数系统中为EOF宏定义的值。正因为这个特殊的返回值,使得譬如getch(),getchar(),等函数的返回值是int而不是char,这一点后面会讲到。EOF一般可以通过返回值,eof()或者
2012-12-27 21:24:45
3204
3
原创 实现pop push min操作时间复杂度为O(1)的栈结构
要求:实现一个栈结构 使得pop push min(获得栈中最小元素)操作的时间复杂度为O(1)要实现min函数复杂度为O(1) 肯定不能遍历弹入的数据也不能简单维护一个小顶堆(小顶堆的维护需要lg(n)时间)这个时候可以利用栈先进先出的特性:考虑2 4 3 1 四个依次入栈的数字。在我们维护的min数据中,我们不需要保存1 2 3 4, 事实上,由于栈只能按照1 3 4 2的顺序
2012-12-27 00:13:44
8652
4
原创 局域网聊天系统__7.客户端调试与总结
调试遇到的问题不多,主要还是涉及到的一些指针问题,最主要的就是在构造函数中对指针成员的初始化问题,如果提供了自定义的构造函数,就容易忘记默认构造函数的初始化,以为默认构造函数自己不去掉用就不会有效,给调试带来了一些麻烦。 客户端整体来说不难,只要理清楚了哪些类负责完成什么任务,需要维护一些什么数据,就好办了。 这里的主对话框类主要负责维护界面,和服务器交互,以及在必要条件下
2012-12-20 22:34:36
1122
原创 局域网聊天系统__6.客户端框架实现
主要包含类:CUserInfo 和 CChatPacket 和服务器定义的一致CChatSocket用于和服务器或其他用户交互数据(类里面内置两个指针,分别指向CClientDlg和CChatDlg 以有效指针来辨别和谁通信) 重写OnReceive和OnClose 均调用对应对话框函数处理CListenSocket用于监听其他用户的连接请求 在OnAcce
2012-12-20 22:33:11
2382
原创 局域网聊天系统__5.客户端业务逻辑与框架
客户端的需求在前面已经分析了。这里是客户端的业务逻辑: 1.初始化: 初始化用户界面(主要是列表控件) 创建并开启监听套接字 2.用户登录: 弹出登录对话框 让用户输入用户名密码以及服务器信息 根据用户输入的服务器信息创建一个新的套接字连接服务器
2012-12-20 22:23:53
1551
原创 局域网聊天系统__4.服务器调试篇
这里主要遇到两个错误,都是粗心吧1. BOOL CServerDlg::VerifyUserAndUpdateUserList(CUserInfo& userInfo, CClientSocket *pClient) { POSITION pos = NULL; BOOL bNewUser = TRUE; for (po
2012-12-20 22:22:23
1017
原创 局域网聊天系统__3.服务器框架实现
CUserInfo类 主要包含一些必要数据以及Serialize支持class CUserInfo : public CObject{public: DECLARE_SERIAL(CUserInfo); CUserInfo(); virtual ~CUserInfo(); CUserInfo(const CUserInfo& userInfo);
2012-12-20 22:16:34
1336
原创 局域网聊天系统__2.服务器业务逻辑分析
服务器业务逻辑分析: 首先分析服务器应该实现的功能,在需求分析中并没有提到客户端和客户端的通信是否需要通过服务器转发,这里选择的是客户端之间直接进行点对点通信,无需经过服务器处理,这样使得服务器的工作减少了很多,只需要管理和更新成员列表以及保存离线消息即可,服务器甚至不需要多线程的支持。 在服务器与客户端交互的过程中,一个完整的流程应该是: 1.服务器开启监听
2012-12-20 21:57:55
2074
原创 局域网聊天系统__1.需求分析以及模型选择
一。需求分析 该局域网简易聊天系统主要分服务器和客户端两个部分。客户端交于用户进行聊天,服务器用户管理所有用户的信息。 客户端功能: 1.和其他在线用户进行正常聊天 2.更新用户状态:当有用户上线或下线时,及时更新该用户状态 3.更新用户列表:当其他用户新上线获得被服务器删除时,及时更新用户列表
2012-12-20 21:56:41
4000
原创 求最大公约数
#includeusing namespace std;//方法一 辗转相除法(问题规模递减得很快, 但求余效率低)// 在第一次调用之后 可以保证 a>bint gcd_1(int a, int b){ return b ? gcd_1(b, a%b) : a;}//方法二 辗转相减法(避免了方法一的求余低效率, 但是迭代次数更多)// 需要适当调整使得每一次处理时 a
2012-12-15 21:08:27
672
原创 目标文件格式分析____ELF
这里不使用工具详细逐步分析验证ELF内容 可参见书目《程序员的自我修养---链接装载与库》本文主要也是阅读该书第三章的读书笔记 供整理思路 理清脉络之用 ELF主要内容: 1.文件头: 里面主要包含包含了: a.平台版本信息:里面有个比较有意思的魔数: 最开始的4个字节是所有ELF文件都必
2012-12-06 23:37:57
1020
原创 多线程模拟冰淇淋店售货问题
问题描述: 在一个冰淇淋店中 主要有老板,店员,收银员,以及顾客四个角色 这里用多线程来模拟他们之间的交互关系,并用伪代码描述 主要流程: 10个顾客到冰淇淋店买冰淇淋,假设每个顾客需要买1到4个冰淇淋,对于新需求的每个冰淇淋,该店都会新分配一个店员来制作,也就是店里此时一共有10到40个店员制作冰淇淋。当店员将冰淇淋制作完成后,先到老板办公室交给老板
2012-11-28 21:26:23
1680
原创 线程安全几个重要概念
实现线程同步的几种手段: 二元信号量: 一种最简单的锁,只有两种状态 占用和非占用 适合只能被一个线程独占访问的资源 多元信号量(信号量): 一种初始化为N的信号量 允许最多N个线程对资源进行同时访问 互斥量: 和二元信号量类似,但是它只能用于实现对某个资源的独立访问 即不可用于实现同步 因为哪个
2012-11-28 21:24:57
4553
3
原创 结构体与位域的对齐
C结构体和C++中的类极为相似 它也可以有构造和析构函数以及其他成员函数 成员函数也通过一个隐含的this指针来操作类成员 它们之间唯一的区别就是默认的成员访问权限 类是私有 结构体是公有 以下对结构体的对齐操作等 大多数也对C++类适用 结构体的对齐方式; 1.对于结构体中的成员 每一个成员的地址必须是该成员类型大小的整数倍 如
2012-11-18 18:20:18
9541
1
原创 动态规划__合唱队形问题
问题描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1Ti+1>…>TK(1 输入格式 Input Format 输入的第一行是一个整数N(2 输出格式 Output F
2012-11-09 17:13:26
12416
1
原创 动态规划的一些整理
动态规划的特征和定义这里就不谈了,关键是要怎样通过代码来理解动态规划。这里收集了一些以前做过的动态规划典型问题。里面基本都有比较详细的注释以及当时对这些问题的一些理解和看法,并且对于所有的问题基本都有递归和迭代两种版本给大家更好的对比和理解。包括:1.斐比那契数列(递归,迭代)2.数学三角形问题(递归,迭代)3.0-1背包问题(包括递归版和两种迭代版,以及一个回溯算法版本)4.最优
2012-11-01 14:03:33
1153
原创 多线程非阻塞模式实例
多线程非阻塞模式到现在算是告一段落吧 虽然还有一些小的bug需要修正 总结一下 准备向后面进发 实现功能: 本程序主要实现远程计算的功能 通过非阻塞套接字和多线程的结合 让通信变得高效 服务器通过维护一个客户端链表来实现对多个客户响应 客户端自身验证表达式的正确性 当输入Byebye时 服务器回复OK 此时客户端断开连接退出 主要模块和线程管
2012-11-01 10:30:38
5726
1
原创 扫雷__重绘优化与数据持久化
刚开始在完成某些功能的时候 可能在刷新的时候都直接用的Invalidate() 这样做的好处是可以直接明了的测试当前功能模块的逻辑正确性,而不必关心具体的下一步优化。但是在界面逻辑完成之后,屏幕会闪得很厉害。这时候就可以通过一些必要的措施来优化或者减少重绘: 例如下一段用于鼠标移动动态选取雷块的代码(简化后): 上一段代码的重绘效率是相当差的 鼠标稍一移动 就
2012-11-01 10:17:25
1277
原创 扫雷___核心鼠标逻辑
鼠标逻辑是扫雷最核心的部分。我们需要根据当先前鼠标位置,所在方块的状态和历史状态,游戏状态等等来综合考虑界面的体现 所需要的状态量: 雷状态:正常STATE_NORMAL,空STATE_EMPTY,未知STATE_DECKY,未知按下状态STATE_DECKY_DOWN 红旗STATE_FLAG 游戏状态:等待GS_WAIT 运行GS_RUN 失败GS_
2012-11-01 10:05:45
2046
原创 扫雷___界面的加载
界面加载其实没有自己想的那么复杂:窗口大小的预估及简单3D效果的绘制: 如果想做一个和window自带扫雷程序一模一样的界面。可以借用一些工具来得到一些基本的量,比如各个矩形框的大小,它们由那些线条组成,线条的宽度等等,然后对窗口块的各个组成部分进行划分,并且得到它们的大小,在验证比对之后,将这一系列的数字做成一串宏。用于之后的引用
2012-11-01 10:04:27
1677
书店管理系统课程设计以及源码
2013-07-07
为PE文件增添启动时对话框
2013-03-17
星形密码探测器
2013-01-07
局域网聊天系统(简易QQ)
2012-12-20
常见动态规划源代码锦集
2012-11-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人