c/c++
文章平均质量分 76
strollerV
hoho
展开
-
61条面向对象设计的经验原则
“你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。” ----------Arthur J.Riel(1)所有数据都应该隐藏在所在的类的内部。(2)类的使用者必须依原创 2006-12-26 13:13:00 · 700 阅读 · 0 评论 -
C函数库介绍: string.h、mem.h
操作函数,所在函数库为string.h、mem.hmem…操作存贮数组void *memccpy(void *destin,void *source,unsigned char ch,unsigned n)void *memchr(void *s,char ch,unsigned n)void *memcmp(void *s1,void *s2,unsigned n)int memi转载 2007-05-20 01:54:00 · 1212 阅读 · 0 评论 -
C函数库介绍:stdlib.h、process.h、io.h、conio.h、stat.h、dos.h、stdio.h、signal.h
进程函数,所在函数库为stdlib.h、process.hvoid abort() 此函数通过调用具有出口代码3的_exit写一个终止信息于stderr, 并异常终止程序。无返回值int exec…装入和运行其它程序int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)int execl转载 2007-05-20 01:58:00 · 3488 阅读 · 0 评论 -
C函数库介绍:dos.h、alloc.h、malloc.h、stdlib.h、process.h
存贮分配子程序,所在函数库为dos.h、alloc.h、malloc.h、stdlib.h、process.h int allocmem(unsigned size,unsigned *seg)利用DOS分配空闲的内存, size为分配内存大小,seg为分配后的内存指针 int freemem(unsigned seg)释放先前由allocmem分配的内存,seg为指定的内存指针 int setb转载 2007-05-20 02:01:00 · 2825 阅读 · 3 评论 -
C语言的几个函数
函数名: atof 功 能: 把字符串转换成浮点数 用 法: double atof(const char *nptr); 程序例: #include #include int main(void) { float f; char *str = "12345.67"; f = atof(str); printf("string = %s float =原创 2007-05-20 02:04:00 · 917 阅读 · 0 评论 -
如何写出专业的C头文件
做到专业,应该是每个职业程序员应该要求自己做到的。让我们看看lua是怎么写头文件的。1.License AgreementLicense Agreement应该加在每个头文件的顶部。Lua Sample: /*** $Id: lua.h,v 1.175b 2003/03/18 12:31:39 roberto Exp $** Lua - An Extensible Extension La转载 2007-05-16 17:50:00 · 967 阅读 · 0 评论 -
eof的使用
假设有一文件in.data,其内容为123,现要读取并输出其内容,程序如下:#include iostream>#include fstream>using namespace std;int main()...{ char c; fstream in; in.open("in.data"); wh原创 2007-05-09 20:34:00 · 940 阅读 · 0 评论 -
Win32环境下两种用于C++的线程同步类
线程同步是多线程程序设计的核心内容,它的目的是正确处理多线程并发时的各种问题,例如线程的等待、多个线程访问同一数据时的互斥,防死锁等。 Win32提供多种内核对象和手段用于线程同步,如互斥量、信号量、事件、临界区等。所不同的是,互斥量、信号量、事件都是Windows的内核对象,当 程序对这些对象进行控制时会自动转换到核心态,而临界区本身不是内核对象,它是工作在用户态的。我们知道从用户态转换到核心态转载 2007-07-11 14:08:00 · 893 阅读 · 0 评论 -
VC显示双缓冲
当应用程序中使用多次GDI调用绘制到窗口中时,在窗口清除并被重新绘制时,会出现明显的闪烁。使用双缓冲技术可轻松消除闪烁。步骤如下:1、假设当前显示设备上下文为CDC * pDC;2、使用CDC对象创建可兼容设备上下文, CDC memdc; memdc.CreateCompatibleDC(pDC);3、使用CBitmap对象创建可兼容为图, CBitmap bmp;转载 2007-07-10 21:28:00 · 1248 阅读 · 0 评论 -
solmry和zero的故事
solmry和zero的故事乌云象铅块一样低低的压了下来,豆大的雨滴打的玻璃窗啪啪作响,难得一见的异常天气正在竭力表现它令人讨厌的 一面。不过这一切似乎并没有影响到 Solmyr,他仍然以他习惯的舒适姿势半躺在宽大的椅子里,手里还托着一杯热腾腾的果汁,在他背后,zero 在键盘上敲打着什么。 “唉,Solmyr ,标准库中的 stack 怎么会是这个样子?设计糟透转载 2007-05-21 10:03:00 · 808 阅读 · 0 评论 -
STL之stack&queue容器
模版类stack,它是一个后进现出的容器适配器--即自己不直接维护被控序列的模版类,而是它存储的容器对象来为它实现所有的功能;typedef stack>> mycont;默认的参数中容器是用deque实现的;被包含的容器要满足提供value_type,size_type,empt,size, push_back,pop_back;可选择的容器有list,deque,vecto转载 2007-05-22 17:31:00 · 1878 阅读 · 0 评论 -
[算法之归并排序] MergeSort
// 将a[p...r] 和a[r+1...q] 合并到 b[0...q-p]void Merge2Sort(int *a, int *b, int p, int r, int q){ int i = p, j = r+1, k = 0; while(ir && jq){ if(a[i] a[j]) b[k++] = a[i++]; else b[k++] = a[j++]原创 2007-09-21 21:42:00 · 856 阅读 · 0 评论 -
链表逆序
题目出处:http://blog.rainbud.net/article/entry20050928-014721给定一单链表的表头指针和指向其中一个节点的指针,要求以该指针为头将原链表逆序排列,例如:1. N1->N2->N3->N4->N5->NULL pHEAD = N1,pSTART = N3,返回N3->N2->N1->N5->N4->NULL2. N1->N2->N3->N4->N5原创 2007-09-19 22:24:00 · 1002 阅读 · 0 评论 -
判断单向链表是否有环
struct node ...{ char val; node* next;} bool check(const node* head) ...{} //return false : 无环;true: 有环一种O(n)的办法就是:设两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然bool check(const node*原创 2007-09-18 23:03:00 · 1320 阅读 · 0 评论 -
[回溯剪枝] pku1011 解题报告
Sticks Time Limit:1000MS Memory Limit:10000K Total Submit:24457 Accepted:5494 DescriptionGeorge took sticks of the same length and cut them randomly until all parts became at most 50 units long. No原创 2007-06-19 21:16:00 · 4046 阅读 · 2 评论 -
C++知识点
这是对C++高效编程的一个总结, 很有指导作用.一、#include “filename.h”和#include 的区别#include “filename.h”是指编译器将从当前工作目录上开始查找此文件#include 是指编译器将从标准库目录中开始查找此文件二、头文件的作用加强安全检测通过头文件可能方便地调用库功能,而不必关心其实现方式三、* , &修饰符的位置对于*和&修饰符,为了避免误解,转载 2007-09-16 17:36:00 · 906 阅读 · 0 评论 -
virtual 的问题
在看一个系统的源码时,发现有些类的纯虚函数中有缺省值,但不知道如何使用这些缺省值?在继承类中能使用吗?但下面的例子在编译的时候通不过: #include ; #include ; #include ; using namespace std; class A { public: virtual void func(int a, int b = 0) = 0; }; class B:转载 2007-09-16 17:28:00 · 763 阅读 · 0 评论 -
pku1631 Bridging signal 解题报告
题目描述: 给出S={1,2,…,n }到它自身的一个映射(一一对应),求出最长不下降子序列的长度,即LIS问题。基本思想: 1. dp 设m[i]表示映射到{1,2,...,i}的最长不下降序列的长度,则有 当 0data[j] 时, m[i] = max(m[j]) + 1; 算法复杂度O(n^2)原创 2007-06-09 11:03:00 · 895 阅读 · 0 评论 -
如何实现字节内的逆序
unsigned rev(unsigned X) { X=(X&0x55)>1; X=(X&0x33)>2; X=(X&0x0F)>4; return X; } 假设X是8位的ABCDEFGH; X&0x55 得到 0B0D0F0H,左移一位得到B0D0F0H0; X&0xAA 得到 A0C0E0G0,右移一位得到0A0C0E0G; 相与得到BADCFEHG;原创 2007-05-22 22:31:00 · 1662 阅读 · 0 评论 -
3个脱壳相关的重要函数介绍
脱壳相关的重要函数介绍【QduWg】翻译声明:本人翻译此类文章,原来是为了自己阅读方便,想到其他人可能也需要,不过E文可能比较难理解,故本人贴出来供各位菜鸟学习吧。错误之处请指出。祝学习进步!^_*1.GetModuleHandle函数如果文件已经被映射进了调用进程的地址空间,则此函数返回指定模块的句柄,HMODULE GetModuleHandle(LPCTSTR lpModuleName转载 2007-07-10 21:38:00 · 884 阅读 · 0 评论 -
在Windows实现C++锁的读写
// 一个Windows下C++读写锁的代码,实现共享读,独占写class ReadWriteLock{public: int m_currentLevel; int m_readCount; HANDLE m_unlockEvent; HANDLE m_accessMutex; CRITICAL_SECTION m_csStateChange;pub转载 2007-07-13 16:14:00 · 1365 阅读 · 0 评论 -
c++的sstream标准库介绍
C++风格的串流控制 C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C风格的串流的输出操作。 strstream类同时可以支持C风格的串流的输入输出操作。 is原创 2007-01-15 13:43:00 · 4202 阅读 · 3 评论 -
[c中宏定义的技巧续] 宏中"#"和"##"的用法
宏中"#"和"##"的用法 一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include #include using namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { printf(STR(vck));原创 2007-01-20 17:17:00 · 2376 阅读 · 0 评论 -
bitset类型
3.5.1 bitset的定义和初始化 表3-6列出了bitset的构造函数。类似于vector,bitset类是一种类模板;而与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值: bitset32> bitvec; //32位,全为0。 给出的长度值必须是常量表达式(2.7节)。原创 2007-01-20 13:55:00 · 1251 阅读 · 0 评论 -
windows核心编程--线程高级
暂停和恢复线程的运行在 线程内核对象的内部有一个值,用于指明线程的暂停计数。当调用C r e a t e P r o c e s s或C r e a t e T h r e a d函数时,就创建了线程的内核对象,并且它的暂停计数被初始化为1。当线程的暂停计数是0的时候,除非线程正在等待其他某种事情的发生,否则该线程就处于 可调度状态。恢复线程,可以用将调用R e s u m e T h r e a原创 2007-01-18 15:43:00 · 763 阅读 · 0 评论 -
windows核心编程--线程
进程是由两个部分构成的,一个是进程内核对象,另一个是地址空间。同样,线程也是由两个部分组成的:• 一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。 • 另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量进 程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。如果在单进程原创 2007-01-18 15:30:00 · 733 阅读 · 0 评论 -
[算法] 求最大公约数的算法
1、欧几里德算法和扩展欧几里德算法 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,原创 2007-01-21 21:36:00 · 1239 阅读 · 0 评论 -
STL学习小结
提供了类型安全、高效而易用特性的STL无疑是最值得C++程序员骄傲的部分。每一个C++程序员都应该好好学习STL:). STL (Standard Template Library 标准模板库)是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的;一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++,一原创 2007-01-20 10:35:00 · 705 阅读 · 0 评论 -
C++箴言:理解typename的两个含义
问题: 在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? template class Widget; // uses "class"template class Widget; // uses "typename" 答案:没原创 2006-12-26 13:19:00 · 686 阅读 · 0 评论 -
set 和,multiset, map和multimap 技术编程详解
set 和,multiset, map和multimap 技术编程详解 1) //bool empty() const; //判断集合是否为空 2) //begin, end //const_iterator begin() const; //iterator begin(); //co原创 2007-01-17 11:37:00 · 1079 阅读 · 0 评论 -
windows核心编程--进程
进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: • 一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。 • 另一个是地址空间,它包含所有可执行模块或 D L L 模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。 进程是不活泼的。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,该线程负责执行原创 2007-01-18 15:27:00 · 716 阅读 · 0 评论 -
#pragma的用法
#pragma 预处理指令详解 在所有的预处理指令中, #Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方 法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #Pragma原创 2007-07-10 21:35:00 · 827 阅读 · 0 评论 -
scanset
scanf 标准输入输出函数scanf具有相对较多的转换说明符,它常常作为入门级函数出现在各种教材中。但奇怪的是,[ ] 和 n 这两种都为c89/c99所规定的标 准说明符却鲜少在大多数教材中出现。虽然 [ ] 和 n 说明符的使用频率不及其它说明符,但两者在程序设计中的作用仍然不可小视,尤其是[ ]说明符。 众所周之,sca原创 2007-03-28 22:22:00 · 1036 阅读 · 0 评论 -
c++ primer 之 generic algorithm
标准库为容器类型定义的操作很少,并没有为每个容器实现更多的操作。因为这部分操作可以抽象出来为所有的容器工作,那就是泛型算法。所谓“泛 型”是指这些算法可以应用于多种容器类型上,而容器内的元素类型也可以多样化。标准库提供了100多个泛型算法,主要定义于头文件中,还有一组泛化的算术算法定义于头文件中。 大多数泛型算法是工作于容器的一对迭代器所标识的范围,并完全通过迭代器来实现其功能。这段原创 2007-03-27 21:39:00 · 977 阅读 · 0 评论 -
[算法之递归] 整数划分问题
题目:将整数n表示成一系列正整数之和,n=n1+n2+...+nk ,其中n1>=n2>=...>=nk, k>=1. 要求n的不同的划分个数,用p(n)表示[思路] 在n的所有不同划分中,将最大加数n1不大于m的划分个数记为q(n, m). 可建立如下的递归关系。 (1) q(n,1)=1, n>=1; (2) q(n,n)=1+q(n, n-1);原创 2007-03-20 23:47:00 · 810 阅读 · 0 评论 -
[算法之分治法应用] 循环赛日程表
问题描述: 设有n(n = 2^k)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空。试按此要求为比赛安排日程: (1) 每个选手必须与其他n-1个选手各赛一场; (2) 每个选手一天只能赛一场; (3) 循环赛一共进行n-1天。 编程思想: 假设n位选手被顺序编号为1,2,...,n,比赛的日程表是一个n行n-1列原创 2007-03-20 23:43:00 · 3490 阅读 · 2 评论 -
关于构造函数,析构函数和赋值操作符
1、只要类里有指针时,就要写自己版本的拷贝构造函数和赋值操作符函数。在这些函数里,你可以拷贝那些被指向的数据结构,从而使每个对象都有自己的拷贝; 或者你可以采用某种引用计数机制去跟踪当前有多少个对象指向某个数据结构。引用计数的方法更复杂,而且它要求构造函数和析构函数内部做更多的工作,但在某 些(虽然不是所有)程序里,它会大量节省内存并切实提高速度。 对于有些类,当实现拷贝构造函数和赋值操作原创 2007-03-20 23:35:00 · 825 阅读 · 0 评论 -
解析动态联编(上)
文章摘要多态性是C++最主要的特征,多态性的实现得益于C++中的动态联编技术。文章通过对动态联编的关键技术虚拟函数表进行深入的剖析,解析的动态联编的过程极其技术要领。 关键字 多态性 动态联编 VTABLE 虚函数 文章正文 一 从多态性谈动态联编的必要性 在 进入主题之前先介绍一下联编的概念。联编就是将模块或者函数合并在一起生成可 执行代码的处理过程,同时对每个模块或者函数调用分配内存地址原创 2007-01-20 17:41:00 · 642 阅读 · 0 评论 -
“Hello world!”的N种写法
在初学一门编程语言的时候,写一个“Hello world!”程序是最常见的入门方法。通过写一个成功的“Hello world!”,可以实践这门语言最基本的语法特性,还可以带给自己成就感,真是一举两得。C/C++语言本身有很多特性,如果能够将这些技术分解出来变 成一个个的“Hello world!”,并且将这些技术点到为止,貌似也算是一件善事。这里,列举了10个“Hello world!”程序转载 2007-01-20 17:16:00 · 666 阅读 · 0 评论 -
如何实现类的成员函数创建线程
class CMySocket {public: DWORD WINAPI WorkThread(LPVOID CompletetionPortID); ...};有如上类,在类中某函数想以函数(WorkThread)CreateThread(NULL, 0, WorkThread, ¶m, 0, &ThreadID))编译会报错:cannot convert paramete转载 2007-12-29 10:04:00 · 947 阅读 · 1 评论