- 博客(113)
- 资源 (5)
- 收藏
- 关注
原创 代码分析工具
#include #include #include #include #include #include #include #include #define LEN 6#define END ";"#define COL 28#define ROW 49#d
2011-07-04 14:27:36
1278
原创 复杂声明分析
#include #include #include #include #include #include #include #include #define END ";"#define COL 17#define ROW 22#define ACCEPT "ac"using namespace std;//注意事项://1.只支
2011-06-24 16:37:00
1076
原创 桌面计算器 ,可计算导数
本计算器采用LR分析,可支持CMATH.H库里的大部分运算,并且支持导数运算 #include #include #include #include #include #include #include #include #define END "$"#define COL 11#define ROW 20#define ACCEPT "a
2011-06-15 15:05:00
4798
2
转载 找s2在s1中第一次出现的位置
<br />constchar* strstr(constchar* s1,constchar* s2)//找s2在s1中第一次出现的位置,<br />{<br /> assert(s2&&s1);<br /> constchar* p = s1,*r = s2;<br /> while (*p!='/0')<br /> {<br /> while (*p+===*r++);<br /> if (*r=='/0')<br /> {<br />
2011-03-01 16:03:00
1900
原创 词法分析系统(C语言版)
<br />头文件。。。。<br />#ifndef dfanfa_h#define dfanfa_h#include <stdio.h>#include <stdlib.h>#include <string.h>/*定义特殊值*/ #define BUF_SIZE 4096 //定义每行读取最大字节数 #define EXPRESSION_SIZE 1024 //定义表达式最大长度
2010-12-16 08:37:00
1242
3
原创 模拟加法器
<br />#include <stdio.h>int addone(int t){ int w=1; while(1) { if(w&t) t&=~w; else { t|=w; break; } w<<=1; } return t;} int add(i
2010-09-03 16:56:00
1743
原创 日期间相差的天数
<br />#include <iostream>#include <stdexcept>#include <ctime>using namespace std;class Date{ private: unsigned year; unsigned month; unsigned day; unsigned days;
2010-09-03 16:50:00
668
原创 根据日期求天数
<br />#include <iostream>#include <stdexcept>#include <ctime>using namespace std;class Date{ private: unsigned year; unsigned month; unsigned day; unsigned days;
2010-06-22 15:50:00
910
转载 有关C++中的 placement new
<br />placement new的含义<br />placement new 是重载operator new 的一个标准、全局的版本,它不能够被自定义的版本代替(不像普通版本的operator new 和 operator delete能够被替换)。<br /><br />void *operator new( size_t, void *p ) throw() { return p; }<br /><br />placement new的执行忽略了size_t参数,只返还第二个参数。其结果是
2010-06-12 17:31:00
889
1
原创 c++ new 重载
当写出<br />p = new P();<br />这样的代码的时候, 实际上有两步操作, 首先分配内存,<br />然后在分配好的内存之上初始化类成员.<br /><br />第二步是有构造函数完成的, 第一步就是new函数的工作.<br /><br />全局的new有六种重载形式, <br />void *operator new(std::size_t count)<br /> throw(std::bad_alloc); //一般的版本<br /><br />void
2010-06-09 16:59:00
930
转载 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
<br />C 风格(C-style)强制转型如下:<br />(T) exdivssion // cast exdivssion to be of type T<br />函数风格(Function-style)强制转型使用这样的语法:<br />T(exdivssion) // cast exdivssion to be of type T<br /> <br />这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形式称为旧风格(old-style)的强制转型。<br />使用
2010-06-09 16:03:00
494
转载 CUJ:标准库:Allocator能做什么?
<br />The Standard Librarian: What Are Allocators Good For? <br /> <br />Matt Austern <br /> <br />http://www.cuj.com/experts/1812/austern.htm?topic=experts <br /> <br />--------------------------------------------------------------------------------<br />
2010-06-08 22:14:00
602
转载 auto_ptr和operator new
<br />#include <memory><br />#include <iostream><br />#include <cstddef><br />using namespace std;<br />class TraceHeap {<br /> int i;<br />public:<br /> static void* operator new(size_t siz) {<br /> void* p = ::operator new(siz);<br /> cout << "Al
2010-06-08 15:25:00
527
转载 拨开自定义operator new与operator delete的迷雾
<br />C++里允许用户通过自定义operator new的方式来更改new表达式的行为,这给了程序员定制内存管理方案的自由。但是享受这种自由的时候必须遵守一定的规范,具体可以参见《Effective C++ 2nd》的相关条款。本文补充解释一些特别容易引起误解的问题。<br /> operator new和operator delete都有其正规形式(normal signature):<br />void* operator new(size_t size);<br />void operat
2010-06-08 15:09:00
597
原创 类模板中的友元声明和定义
普通友元:FooBar的成员和fcn函数可以访问Bar类的任意实例的private成员和protected成员模板友元类FooBar#include using namespace std;template class Bar{ friend class FooBar; Type pri;};class FooBar{ public: template void foofcn(const Bar& b);
2010-06-04 15:10:00
4698
转载 判断闰年
<br />printf(a%(a%100?4:400)?"NO":"YES");<br /> <br />(0 == n %400) || ((0 == n%4) && (0 != n%100))
2010-06-04 08:26:00
709
原创 几种模板友元的声明
<br />#include <iostream>using namespace std;/*友元模板函数在类的内部声明,可以实例化多次,因为每次实例化都会生成相应的版本*/ template<class Type>class Bar{ template<class T> friend class Foo; friend ostream& operator << (ostream& os,const Bar<Type> &b) {return os<<b.
2010-06-02 18:21:00
607
转载 C++中catch(…)如何使用
C++异常处理模型的trycatch使用语法,其中catch关键字是用来定义catch block的,它后面带一个参数,用来与异常对象的数据类型进行匹配。注意catch关键字只能定义一个参数,因此每个catch block只能是一种数据类型的异常对象的错误处理模块。如果要想使一个catch block能抓获多种数据类型的异常对象的话,怎么办?C++标准中定义了一种特殊的catch用法,那就是” catch(…)”。<br />感性认识<br /><br /> 1、catch(…)到底是一个什么样的东东
2010-06-01 16:35:00
1533
原创 打印二叉树形结构
<br />#include <stdio.h>/*treeview打印二叉树型结构,d1为每行前面的空格数,d2为元素间的空格数n为每次打印的元素每层的前面空格数等于它下一层的中间空格数最多可打印6层*/ void treeview(int d1,int d2,int n){ int i,j=1,k,count=1; if(n>0) { treeview(d2,d2*2+1,n-1);//每层递归前面空格数和中间空格数的关
2010-06-01 15:09:00
5117
转载 大小端模式
<br />所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; <br /> 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。 <br /> 为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以
2010-05-31 15:21:00
492
转载 Sutter's Mill: Befriending Templates
Lets say we have a function template that does SomethingPrivate() to the objects it operates on. In particular, consider the boost::checked_delete() function template, which deletes the object its g
2010-05-31 10:03:00
878
转载 模板友元化
摘要: 如何将一个函数模板的特化声明为友元呢?标准C++给你提供了两种合法的语法。然而,事实上,对于其中的一种语法,几乎没有编译器对其给予支持;而对于另一种,当前所有主流编译器(除了一款以外)都对其提供了支持。 假设我们有一个函数模板,可以调用其所操作的对象的SomethingPrivate()方法。特别地,考虑boost::checked_delete()函数模板,它用以
2010-05-31 09:38:00
714
转载 直接调用类成员函数地址
一、成员函数指针的用法 在C++中,成员函数的指针是个比较特殊的东西。对普通的函数指针来说,可以视为一个地址,在需要的时候可以任意转换并直接调用。但对成员函数来说,常规类型转换是通不过编译的,调用的时候也必须采用特殊的语法。C++专门为成员指针准备了三个运算符: "::*"用于指针的声明,而"->*"和".*"用来调用指针指向的函数。比如: class tt { publi
2010-05-27 15:07:00
572
转载 if宏
这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endi
2010-05-26 16:08:00
2228
1
原创 排列组合问题
排列组合的基本理论和公式 排列与元素的顺序有关,组合与顺序无关.如231与213是两个排列,2+3+1的和与2+1+3的和是一个组合. (一)两个基本原理是排列和组合的基础 (1)加法原理:做一件事,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+m3+…+m
2010-05-26 10:36:00
1023
原创 删除代码中的注释
测试代码 /*rtyr*/#include using namespace std;/*class A{ public: static int init() {return 22;}};*/namespace A/*""sdfgse*/{ int init() {return 22;}}
2010-05-24 09:50:00
1211
转载 成员函数的重载、覆盖与隐藏
重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual关键字。
2010-05-21 09:40:00
506
原创 解析浮点数内存
#include #include #define N 23//N为要取得小数点后的位数 #define M 64using namespace std;/*float_str打印浮点数的内存形式*/ char* float_str(float *f){ unsigned int sign,base,exp,t=*(unsigned int*)f;
2010-05-21 08:26:00
883
转载 argv[0] 使用方法
我们对C语言中main函数这样的写法应该不会陌生:int main(int argc, char *argv[]){......}这是UNIX和Linux中的标准写法。int argc, char *argv[] 表示程序运行的环境变量。int argc表示环境变量的个数,char *argv[] 为存储具体环境变量的字符串指针数组。使用命令行窗口运行程序时,为程序输入多个参数,程序可以调用多
2010-05-20 11:31:00
24692
1
转载 STL容器 算法 函数表
该篇分为十一部分,分别是:vector类的主要成员、deque类的主要成员、list类的主要成员、stack类的主要成员、queue类的主要成员、priority_queue类的组要成员、set类的主要成员、multiset类的主要成员、map类的主要成员、multimap类的主要成员、STL算法函数(一)vector类的主要成员vector是可边长的向量,比较灵活☆ value_type;//对
2010-05-17 15:17:00
746
原创 继承与访问权限
#include using namespace std;class A{ public: friend class Afnd;//A的友元类 virtual void vfun() {cout<<"A::vfun()"<<endl;}//虚函数vfun void callvfn(A& a) { a.vprifun();}//A的内部函数
2010-05-17 10:01:00
685
原创 构造随机数列
#include iostream>#include ctime>using namespace std;void sum(unsigned n,unsigned m)//构造和为n,长度为m的数列{ if(m==0||n0) { coutnendl; return; } unsigned t=(rand()%((unsigned)(n/m
2010-05-13 16:13:00
671
转载 cout的输出格式
必须#include 先。 相关functions:long flags( ) const 返回当前的格式标志。 long flays(long newflag) 设置格式标志为newflag,返回旧的格式标志。 long setf(long bits) 设置指定的格式标志位,返回旧的格式标志。 long setf(long bits,long field)将field指定的格式标志位
2010-05-13 09:04:00
2169
转载 指针左右原则
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:The right-left rule: Start reading th
2010-05-13 07:55:00
1347
1
转载 C++ 语言特性的性能分析
引言本书主要针对的是 C++ 程序的性能优化,深入介绍 C++ 程序性能优化的方法和实例。全书由 4 个篇组成,第 1 篇介绍 C++ 语言的对象模型,该篇是优化 C++ 程序的基础;第 2 篇主要针对如何优化 C++ 程序的内存使用;第 3 篇介绍如何优化程序的启动性能;第 4 篇介绍了三类性能优化工具,即内存分析工具、性能分析工具和 I/O 检测工具,它们是测量程序性能的利器。本章从
2010-05-11 20:23:00
589
转载 各种容器特点总结
Vector1. 内部数据结构:连续存储,例如数组。2. 随机访问每个元素,所需要的时间为常量。3. 在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。4. 可动态增加或减少元素,内存管理自动完成,但程序员可以使用reserve()成员函数来管理内存。5. 迭代器失效插
2010-05-11 17:08:00
938
转载 struct tm 和 time_t
struct tm 和 time_t2009-10-19 12:43关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)1.概念在C/C++中,对字符串的操作有很多值得注意的问题,同样,C/C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的
2010-05-11 15:06:00
567
转载 标准I/O库函数
2.1. 文件的基本概念 请点评我们已经多次用到了文件,例如源文件、目标文件、可执行文件、库文件等,现在学习如何用C标准库对文件进行读写操作,对文件的读写也属于I/O操作的一种,本节介绍的大部分函数在头文件stdio.h中声明,称为标准I/O库函数。文件可分为文本文件(Text File)和二进制文件(Binary File)两种,源文件是文本文件,而目标文件、
2010-05-11 09:08:00
1653
转载 关于流和缓冲区的理解以及一般标准输入问题的解决方法小结
先看两个问题(以下程序运行环境为WIN2000+DEV-C++4.9.9.2): 1、执行以下程序:/***************************************************** Name: copy_bar.c Copyright: kernelxu Author: kernelxu D
2010-05-11 08:55:00
1577
1
词法分析系统(有限自动机,DFA,NFA)
2010-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人