C/C++
文章平均质量分 77
Ginvar
这个作者很懒,什么都没留下…
展开
-
析构函数为什么要写成虚函数
#includeclass Base { public: Base(){ mPtr = new int; } ~Base(){ delete mPtr;coutprivate: int*mPtr; } ;class Derived : public Base { public: Derived(){ mDerived = new原创 2013-08-19 18:26:35 · 1491 阅读 · 0 评论 -
windows下libcurl的使用
使用的是curl-7.26.0版本,这个版本下的根目录下有.dsw文件,个人只是觉得使用编译方便点,其他版本未深究解压打开根目录下的curlxxx.dsw选择libcurl,单编译这个release=======================使用的时候 指定VC路径include到目录里面的indcludelib库指到刚编译转载 2016-04-08 18:36:53 · 1312 阅读 · 0 评论 -
poj 1980 Unit Fraction Partition
DescriptionAfraction whose numerator is 1 and whose denominator is a positiveinteger is called a unit fraction. A representation of a positiverational number p/q as the sum of finitely many unit f原创 2013-08-19 18:26:12 · 819 阅读 · 0 评论 -
LZW编解码算法(C实现)
代码中加入了自己的一些注释,以便于阅读理解。程序由五个模块组成lzw.h 定义了一些基本的数据结构,常量,还有变量的初始化等。#ifndef __LZW_H__#define __LZW_H__//------------------------------------------------------------------------------转载 2014-02-17 15:02:53 · 3146 阅读 · 0 评论 -
哈夫曼编码
思想:得到哈夫曼树后,自顶向下按路径编号,指向左节点的边编号0,指向右节点的边编号1,从根到叶节点的所有边上的0和1连接起来,就是叶子节点中字符的哈夫曼编码。下图体现了哈夫曼编码的过程: #include stdio.h>#include stdlib.h>#include string.h>//哈转载 2014-02-13 12:36:53 · 673 阅读 · 0 评论 -
哈夫曼编解码的C++实现
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525转载 2014-02-13 14:02:11 · 878 阅读 · 0 评论 -
编写一个垃圾回收器
每当我倍感压力以及有很多事情要做的时候,我总是有这样一种反常的反应,那就是希望做一些其他的事情来摆脱这种状况。通常情况下,这些事情都是些我能够编写并实现的独立的小程序。一天早上,我几乎要被一堆事情给整疯了——我得写我那本《游戏编程模式》、处理一些工作上的事情、还要准备一场Strange Loop的演讲,然后这时我突然想到:“我该写一个垃圾收集器了”。是的,我知道那一刻让我看上去转载 2013-12-30 14:39:52 · 996 阅读 · 0 评论 -
GBK到UTF8编码转换的C++实现
std::string GBKToUTF8(const std::string& strGBK){ WCHAR * str1; int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0); str1 = new WCHAR[n]; MultiByteToWideChar(CP_ACP, 0, strGBK.c_s原创 2013-12-02 22:20:50 · 997 阅读 · 0 评论 -
Hook API(挂钩API)技术
Hook API,简单说,就是给API函数挂钩,将本应该调用的API函数拦截,使其转而调用我们自己的函数。这里,我主要介绍如何利用IAT挂钩来实现API拦截。在我们启动目标程序时,操作系统负责为目标程序创建虚拟地址空间,并将这个可执行模块(就是目标程序)加载到地址空间中去,接下来,系统会将目标程序所需要的DLL文件映射到地址空间。我们将需要映射到地址空间的目标程序及所需DLL统称为模块(Mod原创 2013-08-25 00:13:00 · 2646 阅读 · 0 评论 -
DLL注入
每个进程都有独立的地址空间,违规访问可能会导致内存访问违规,但是有时候我们需要打破进程的界限,访问另一个进程的地址空间,这里就可以用到我们的DLL注入技术了,将我们的DLL插入到另一个进程的地址空间,一旦你的DLL进入另一个进程的地址空间,你就可以对该进程为所欲为了。。。下面介绍几种DLL注入技术:利用注册表注入DLL在注册表中有一个关键字AppInit_DLLs,它的路径是:原创 2013-08-21 01:30:41 · 1130 阅读 · 0 评论 -
(转)vector中使用erase删除…
原文地址:(转)vector中使用erase删除元素作者:独自等待很容易受数组的影响,写出如下代码:std::vecotr::iterator it =vc.begin();for( ; it != vc.end(); it++ ){ if( *****) vc.erase(it);}原因是vector中在删除一个元素后,迭代器会自动指向下一个元素。所以,上面的代码很可转载 2013-08-19 18:27:03 · 736 阅读 · 0 评论 -
C/C++文件读写
一、ASCII 输出为了使用下面的方法, 你必须包含头文件(译者注:在标准C++中,已经使用取代fstream.h>,所有的C++标准头文件都是无后缀的。)。这是的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, 已经被包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。如果你猜是"fstrea原创 2013-08-19 18:26:41 · 648 阅读 · 0 评论 -
结构与联合
结构: struct SELF_REF1{ int a; struct SELF_REF1 b; int c;};这是一种错误的自引用,结构内包含结构体,它也包含自己的b,这样就是一个无止尽的递归程序,相反,换成下面这样,就是正确的。 struct SELF_REF1{ int a; struct SELF_REF原创 2013-08-19 18:26:39 · 587 阅读 · 0 评论 -
mutable关键字
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改原创 2013-08-19 18:26:33 · 415 阅读 · 0 评论 -
论C++类对象赋值
class Demo{public: Demo() {} Demo(intj) { cout<<"Demo int:" this->i =j; } Demo(constDemo& d) { cout } Demo& operator= (const Demo& d) { cout<<"operator=原创 2013-08-19 18:26:31 · 517 阅读 · 0 评论 -
windows下zlib库的编译与使用
一、zlib库的编译 首先要下载这个库,这个谷歌和百度也都可以找得到的。我下载的是zlib-1.2.5,下载完解压出来即可。下边就开始编译吧。(包括动态库和静态库两种)1. 首先开启VS2010的Command Prompt (32bit),也就是命令提示窗口。2. 进入到zlib-1.2.5/contrib/masmx86目录,执行bld_ml32.bat。(同理,转载 2016-04-21 12:15:30 · 19866 阅读 · 1 评论