Code
文章平均质量分 67
boluo1982107
积极,勤政,不二过。
展开
-
在内核中引入rootkit代码
将代码植入内核中的直接方式是使用可加载模块(有时称为设备驱动程序或内核驱动程序)。Windows设备驱动程序,入口点必须注册函数回调。NTSTATUS DriverEntry(...){ theDriver->DriverUnload = MyCleanupRoutine;}NTSTATUS MyCleanupRoutine(){}驱动程序原创 2008-05-24 09:22:00 · 571 阅读 · 0 评论 -
从编写Matrix模板到VC6对模板的支持
在模板支持这一块,VC6表现很差,已经不是第一次了,看下面的代码就知道了:#include using namespace std;template class T>class CTrMatrix_Kernel{};template class S, class T = CTrMatrix_Kernel >class CTrMatrix_Shell原创 2008-11-17 09:31:00 · 1204 阅读 · 0 评论 -
一个简单的Matrix实现
我们直接来看代码吧:/* Matrix.h */#pragma once #include using namespace std;//矩阵类 class Matrix{public: double * p; //矩阵宽度 long width; //矩阵高度 long height;p原创 2008-11-17 12:27:00 · 1305 阅读 · 0 评论 -
关于指针的总结
1,和指针有关的声明简单的就不说了,你能理解下面的例子吗?int **p1; // p1 is a pointer to a pointer to an int. int *&p2; // p2 is a reference to a pointer to an int. int &*p3; // ERROR: Pointer to a reference原创 2008-11-17 18:51:00 · 790 阅读 · 1 评论 -
一篇关于Matrix库的使用文档
matrix a=matrix::unit(4); //4阶单位阵。 matrix c(a); a(1,2)=2; //此时矩阵a的副本c任然不变。 cout c=a; //此时c是a的一个副本。 a(2,1,false)=10;原创 2008-11-17 12:36:00 · 925 阅读 · 0 评论 -
C++标准库的一个有趣的小bug(转载)
转载自:http://dev.csdn.net/article/34/34236.shtm在看别人的代码时,意外发现了一个标准库的问题(不知到标准委员会的c++ standard lib.core issue文件里有没有提到,不管它),是这样的,代码如下:struct X{};ostream& operator{原创 2008-11-17 12:59:00 · 771 阅读 · 0 评论 -
boost源码剖析之:多重回调机制signal(下)
转载自:http://bbs.51cto.com/thread-442114-1-1.html概述在本文的上篇中,我们已经分析了signal的总体架构。至于本篇,我们则主要集中于将函数对象(即仿函数)连接到signal的来龙去脉。signal库的作者在这个方面下了很多功夫,甚至可以说,并不比构建整个signal架构的功夫下得少。之所以为架构,其中必然隐藏着一些或重要或精妙的思想。学过STL的人转载 2008-11-17 14:42:00 · 675 阅读 · 0 评论 -
typedef的妙用
在yathing写复杂指针声明和使用的示例的时候,用到了typedef,能够使得程序变得清晰;可巧又找到一些介绍typedef的文字;可能你会说“代码写得复杂点没关系,我就喜欢struct A obj这样的声明!”,不过,当问题复杂的时候,你理解可就麻烦了;此外,“勤劳”往往意味着创造力的丧失。typedef给你一种方式来克服“*只适合于变量而不适合于类型”的弊端。你可以如下使用typedef转载 2008-11-18 09:10:00 · 841 阅读 · 0 评论 -
字符型指针变量与字符数组的区别
(1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符。而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址。 (2)初始化赋值含义 字符数组与字符指针变量的初始化赋值形式相同,但其含义不同。例如: char str[ ] ="I am a stud原创 2008-11-18 09:28:00 · 8237 阅读 · 2 评论 -
记一次快速排序算法的调试
同学用C++编写了一个快速排序的程序,实现如下功能:1,用一个数组包含原始数据;2,用一个数组包含每个原始数据的地址;3,利用快速排序算法,对第二个数组进行排序。很显然,排序的交换操作与原始数据的存储分开进行,是为了节省时间。算法写出来了,程序编译运行了,但是:排序前和排序后,输出的结果居然是一样的。 我最初的想法是:既然排序前后输出一样,那么很可能是根本没有发生交换[1]。原创 2008-11-23 20:59:00 · 988 阅读 · 0 评论 -
new和delete操作符重载
#include #include using namespace std;class MemoryPool{};class MemoryObject{private: MemoryPool* aPool;public: MemoryObject(MemoryPool* p) { aPool = p原创 2008-11-28 08:43:00 · 981 阅读 · 0 评论 -
不用友元访问类私有成员 X C++对象模型
虽然没有现实意义,但对理解C++的对象模型是很有帮助的。 前几天,在论坛里看到一个帖子,内容是: (原帖见:http://community.csdn.net/Expert/topic/5014/5014384.xml?temp=.3018152) ======================================== class a {转载 2008-12-12 08:47:00 · 1057 阅读 · 1 评论 -
new base override混合使用
代码示例如下:abstract class Query { public void func1(int i) { Console.WriteLine("Query.func1"); } public virtual void func2(int ival) { func1(ival); } } class OrQ原创 2009-05-31 10:02:00 · 985 阅读 · 0 评论 -
搜索“如何减少换页错误”
有这么一道笔试题:如何减少换页错误?1,进程倾向于占用CPU2,访问局部性(localilty of reference)满足进程要求3,进程倾向于占用I/O4,使用基于最短剩余时间(shortest remaining time)的调度机制5,减少页大小 yathing最先排出1和3选项,访问快慢、访问接口,对“错误”能够有什么影响?肯定是需要某种策略。仔细看原创 2009-06-02 14:28:00 · 7484 阅读 · 6 评论 -
virtual在C++和C#中的差别
C++里面使用virtual多方便:#include using namespace std;class Query{public: virtual void func(){cout<<"asdasdsad"<<endl;}};class AndQuery:public Query{public: virtual void func() { cou原创 2009-05-31 09:14:00 · 1223 阅读 · 1 评论 -
运算与时间(G++、Ubuntu 8.0.4、dell dimension 5150)
乘法运算#include #include #include using namespace std;int main(){ time_t start,end; struct tm* time_start,* time_end; time(&start); time_start = localtime(&start); printf("start time is: %原创 2008-11-14 08:18:00 · 969 阅读 · 0 评论 -
bitset的使用
bitset如何初始化、如何转化为double类型的小数、如何进行交叉(可以尝试用string作为中间量,因为bitset可以用string初始化的,但是这样的构造和传递会消耗很多的时间——我讨厌这种不必要的消耗!)假如说我希望计算的精度足够高,将bitset取为64位,那么什么类型的数才能输出?如果不需要输出,那么在取精度的时候,如何将一个64位的bitset转化为double类型的小数?(原创 2008-11-12 20:50:00 · 4271 阅读 · 0 评论 -
一个文本行排序程序(From 《泛型编程与STL》)
就像高中班主任对待班上两个极端的学生一样:一个极优秀、一个成绩极差。我承认vc6的IDE环境让我无法割舍,但是它对模板类型的嵌套,支持得实在不怎么样呢!对于STL,没什么好说的,一个轻松处理文本行排序的程序,就这么几下搞定;记得在C++prime中讲述的例子程序吗?感慨颇多吧! #include #include #include #include using原创 2008-11-09 22:11:00 · 823 阅读 · 0 评论 -
dlg.domodal是不是把系统的线程挂起了(转载)
http://www.itzhe.cn/article/20071230/39538.html 《dlg.domodal是不是把系统的线程挂起了》,在这篇文章中,分析得比较详细,除了从资料文献中推测以外,还提出了实验证明的方法:打开模式对话框后,另一个窗口的快捷键消息不能响应了——间接证明消息被阻塞了。我觉得这种方法是值得我们在编程学习中借鉴的。原创 2008-06-10 13:36:00 · 877 阅读 · 0 评论 -
一点读写文件的感悟
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL); if (dlg.DoModal()==IDOK) { CString c_str = dlg.GetFileName(); CFile file(c_str,CFile::modeRead); char pbuf[10]; fi原创 2008-06-10 13:38:00 · 686 阅读 · 0 评论 -
modeless dialog(转)
1:问题:我有一无模式对话框。我怎样才能在窗口退出时删除CDialog对象? 解答:把“delete this”加到PostNcDestroy中。这主要用在需要自动删除对象的场合。 2:问题:为什么把“delete this”放在PostNcDestroy中而不是OnNcDestroy? 解答:OnNcDestroy只被已建立的窗口调用。如果建立窗口失败(如PreCreateWindo原创 2008-06-10 13:40:00 · 2391 阅读 · 0 评论 -
由dynamic_cast想到的
说到类型转换,除了dynamic_cast以外,其余的转换行为都是在编译期间就得以确定的,转换是否成功,并不依赖被转换的对象。平常用得比较多的,是学生风格的“显式转换”:pb = (B*)pa; 老是有人说这样不好,但是在结构层次比较少、类型简单的时候,我们偏偏喜欢这样偷懒。如果想养成好的习惯,多使用一些static_cast这样的转换语句,让自己显得专业一点。如果我看到前面的转换方式,我会觉原创 2008-11-06 09:41:00 · 855 阅读 · 0 评论 -
dynamic_cast和polymorphic_cast的比较
C++中的多态转换是通过函数dynamic_cast来实现的。适用于dynamic_cast函数的典型场合有两种:从基类向派生类的向下转型和交叉转型(crosscast),即从一个基类到另一个基类的转型。为了理解这两个概念的含义,参考下面的代码,可以将polymorphic_cast换成dynamic_cast。类型继承关系,在base1和base2中,分别有一个虚析构函数(delete p的时候原创 2008-11-06 17:23:00 · 2740 阅读 · 1 评论 -
dynamic_cast与polymorphic_cast再比较
在前面一篇文章中,我曾说过:polymorphic_cast和dynamic_cast不同的地方,就是它优秀的地方;这话不全对。如果在程序中,不认为失败的多态指针转型是错误的话,那么就应该使用dynamic_cast函数,而不是polymorphic_cast函数。例如,一种常见的情形就是使用dynamic_cast函数对特定的类型进行测试。在进行数种类型之间的转换时,通过使用异常处理来进行测原创 2008-11-06 21:21:00 · 1091 阅读 · 0 评论 -
对boost::Regex的初步想法
我知道的:Regex能够帮助我方便地处理文本;我不知道的:Regex的效率究竟有多快?对于大规模的应用,是否恰当?举例实践试试!Regex对于二进制文件,如何进行匹配呢?对于通用unicode,regex似乎一定的有问题?需要本地化?文本中是“123”,那么这里的是123这样一个数字,还是1、2、3三个字符?regex处理的时候需要注意什么?getline以后,就将所有内容原创 2008-11-07 09:27:00 · 1042 阅读 · 0 评论 -
Boost::Regex代码示例
看一个别人给出的例子,当我们输入“select 字符串 from 字符串”的时候,会得到输出;如果不符合这个格式,就会输出error。注意:在命令行下输入的时候,按ctrl+Z、回车表示行输入结束。#include #include #include #include #include using namespace std;using namespa原创 2008-11-07 17:27:00 · 18440 阅读 · 2 评论 -
正则表达式 . 格式
/A匹配缓冲区的起始点;/Z匹配缓冲区的结束点;关于它们的使用,详细参见代码。/d表示数字,/d{3}表示一个三位数的数字,{}表示约束运算符(bound operator),表示要重复3次;和//d//d//d的效果一样;重复符+:表示前面的表达式可以重复,但是必须至少重复一次;比如:[a-zA-Z]+,就表示一个单词了——可以有任意多个大小写字母不断重复组成,不就是单词么!/w原创 2008-11-07 17:44:00 · 1537 阅读 · 0 评论 -
static_cast与dynamic_cast的比较
最近一直在琢磨类型转换的问题,索性追究到底了。仍然是前面提到的继承结构:base1、base2、derived,但是base1和derived有同名的、非虚函数,我的目的是:使用子类的对象,调用基类的同名函数(这么做在技术上是完全可能的,因为子类对象包含基类对象嘛!)。看下面的代码:#include #include using namespace std;us原创 2008-11-06 17:55:00 · 15365 阅读 · 2 评论 -
ctime、CTime、windows函数调用
在dll里是不能使用CTime类的,因为它里面有一个函数不被windows支持(找资料时看到这句话)。如果要在控制台程序下使用MFC类,#include ,另外,选择"Using MFC in a static library"。#include #include using namespace std; int main() { time_原创 2008-11-12 08:27:00 · 3296 阅读 · 0 评论 -
Boost::regex练习实例
#include #include #include #include #include #include using namespace std;using namespace boost;//写一个程序,提取之间的内容 int main(){ // regex reg("((.*))?"); regex原创 2008-11-08 16:06:00 · 854 阅读 · 0 评论 -
循环中的线程
在循环中创建新线程,是初学者常犯的错误。下面给出一段示例代码,注意:运行它们可能导致系统不可使用。除非不介意重启,否则最好别运行它们。 using System;using System.Web.Mail;using System.Threading;using System.Collections;public class LoopingThreads原创 2008-12-31 21:25:00 · 3012 阅读 · 0 评论 -
运算与时间(Debug、windowsXP、dell dimension 5150)
#include #include using namespace std;//一亿次,用了34秒;一千万次,用了2秒; void main(){ CTime t1 = CTime::GetCurrentTime(); double j =2.345; for (int i=0;i { j=j*1.00原创 2008-11-12 12:48:00 · 860 阅读 · 0 评论 -
用内存映射文件读取大型文件
引言通常情况下,我们使用文件读写函数对文件进行处理,比如Win32 API 的CreateFile()、WriteFile()、ReadFile()等。但是对于某些特殊应用领域,需要几十GB、几百GB的海量存储,常规处理方法显然行不通了,目前对于这种大文件的操作一般是以内存映射的方式来加以处理的。CreateFile():用来创建一个读文件的句柄;CreateFileMapping原创 2008-05-21 08:12:00 · 3658 阅读 · 2 评论