- 博客(15)
- 资源 (1)
- 收藏
- 关注
原创 关于Thunk
最近心情越来越差了,我心情不好的时候就喜欢倒腾些小玩意和吃东西,下面就是我的小玩意之一,其实也是两个月以前的代码了,现在把它写成文档,希望能帮我回复心情,现在开始正题~~ 两年前我就听过这个技术,大概其也算是懂点,但是没实做过,前些时用MFC做UI时需要一个对SetTimer API的封装,因为这类API对C++对象的支持很不好,所以,我们总得耍点花招对付它,于是重拾起了这个Thunk。
2008-02-20 01:43:00 921
原创 C语言结构的成员对齐
Natural Alignment == sizeof(type); Order Alignment == k == 所指定的Alignment; 例如#pragma pack(8) k == 8; Actual Alignment == min(Natural Alignment, k); struct Actual Alignment == max(each member);
2008-02-20 01:43:00 573
原创 算法记录:MSD基数排序 + qsort 对字符串排序
typedef std::vector t_vstr;void exch(std::string &str1, std::string &str2){ std::swap(str1, str2);}void str_qsort_internal(t_vstr &arr, int l, int r, size_t d){ if(l >= r)return; int i = l - 1, j
2008-02-20 01:42:00 1551
原创 算法记录:堆排序
这次给出堆排序,这东西也比较干净,就是把数组当成一颗二叉树来处理,现在假设数组索引是从1开始的(注意,违反C的惯例),那么其子节点就是1*2和1*2 + 1,某个节点的父节点就是node_idx/2; 索引1所在的节点未根节点. /*注意,我这个函数是向下修正函数,为了make heap方便,我用的是当索引起始为1来编写的,不要有任何疑虑,下面你 就可以看到为什么是可行的. 这个函数的功能是向下修
2008-02-20 01:41:00 568
原创 算法记录:二进制快速排序
这个东西有点类似于quick sort,更类似与人数数,比如你怎么确定123,和130哪个更大?一定是先看百位再看10位对吧?简单的基数排序就类似这样,我现在来写个按位提取的,把一个unsiged int当作一个二进制树,从第31bit开始比较,因为如果第31bit为0,那么证明这些都比为1的要小,所以放到前面,以此类推bool digit(const unsigned int &num, siz
2008-02-20 01:40:00 1473
原创 重读Alpha-Beta算法
Alpha值代表的是发起走棋一方(期望极大值)做能接受的最小值,搜索极大值一方必须要找到一个比Alpha值更大的,否则这步棋就没有任何意义 Beta值代表的是对手(期望极小值)所能接受的最坏值,搜索极小值的一方必须找到一个比Beta值更小的一步棋,否则也是没意义的(因为有更好的一步棋已经生成了) 先看函数调用方式 int AlphaBeta(int depth, int alpha, in
2008-02-20 01:39:00 3123 1
原创 算法记录:归并排序
好几天没写了,这次给出的是我最终成型的代码了,所以可能有点脏,排序的链表部分我会放到RavenX的List部分去做的,这个没办法跟数据结构抽离开的先来个归并排序,这玩意思路其实很简单很简单的东西,就是针对比较次数来说C[N] = 2*C[N/2] + N;这里把N待换成2^n带入,最终的比较次数是N*logN,也是个蛮经典的东西,Merge排序的一个好处是如果你存储是稳定的,那么它本身的效率也是稳
2008-02-20 01:39:00 539
原创 算法记录 : 基本排序
好几天没动编译器了,今天先练练手,下次给出Shell排序,堆排序和归并排序 这几天心情还可以,不过有点不务正业,先给出一套基本的排序算法,下次给出一组复杂的排序算法,最后让他们来个火并 inline void exch(t_uint32 &a, t_uint32 &b) ...{ t_uint32 tmp = a; a = b; b = tmp; } inlin
2008-02-20 01:37:00 461
原创 泛化的ScopeGuard模板类
#pragma once#include cassert>#include memory>#include "non_copy_able.h"class ScopeGuardImp : private NonCopyable...{public: ScopeGuardImp() ...{ }; virtual ~ScopeGuardImp()...{ }};t
2006-09-08 23:41:00 1274 1
原创 一个人的战争(3) : 我眼中的异步与非阻塞
最近在尝试封装个网络工具包,从Socket开始,希望全部自己动手并且能提供一个跨平台的接口,哈哈,新手的通病就是求大求全,不过有一点,就是学习一些现代操作系统共有的特性的时候,我认为站在多个差不多的平台的角度来看待同一个问题要比单一的观察一个OS提供的API要好的多. 闲话少说, 当我进行到WIN32的OVERLAPPED I/O和IOCP的时候突然发现我无法继
2006-09-06 21:49:00 1097
原创 一个人的战争(2) : 成员函数与线程
本来今天打算贴BT Client的Tracker Requester的代码的,可是整理的不太完善,因为里面牵扯到很多线程和IOCP的东西,所以我先把一部分自己封装的线程代码贴上来供各位读者评论 先看下我对Win32线程的最浅封装, 注意这个是声明在thrad/win32/data_type.h下的struct ThreadHandle
2006-09-06 18:03:00 1097
转载 Anders Hejlsberg语录
Anders Hejlsberg语录If you ask beginning programmers to write a calendar control, they often think to themselves, "Oh, Im going to write the worlds best calendar control! Its going to be polymorphi
2006-09-05 01:48:00 870
原创 Exceptional C++ 读书笔记
Exceptional C++ 读书笔记 //内存管理的一部分来自于http://blog.csdn.net/kingofark/category/9109.aspx Item 1 Iterator: (1): 注意当前迭代器是否有效,如果无效则解引用产生程序错误; (2):注意当前迭代器生命期,某些容器经过某些操作后将重新分配内部存储空间,则当前迭代器无效; (3) : 有效范围
2006-09-05 01:34:00 999
原创 More Exceptional C++ 读书笔记
More Exceptional C++ 读书笔记 Item 1 Switching Streams (1): 多考虑易读性,避免编写过渡简洁但是不易懂,不易维护的代码; 记个相当简洁的流切换代码: (argc > 2 ? ofstream(argv[2], ios::out|ios::binary) : cout ) 1 ? ifstream(argv[1], ios
2006-09-05 01:34:00 942
原创 一个人的战争 (1) : Bencoding格式解码
自学C++一年有余,一直想自己开发个什么东西,终于在今年7月份决定写个BT的客户端吧,恩,说干就干,于是开始了这次痛苦的旅程,越深入到各个细节当中越觉得自己可能完不成这个东西了,故决定开始写Blog激励自己一下,也希望能把一个编程新手遇到的各种困难都记录下来,供他人借鉴,也便于自己日后的查寻. 我这人比较罗嗦,可能整个文档中间会夹杂一些个人感悟,期望哪位不幸读到的朋友谅解. 有对P
2006-09-05 01:19:00 1295
DieHard
2008-02-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人