07 2013 档案

摘要:切换到boost目录下面,使用编译命令>bjam.exe --with-date_time --toolset=msvc-9.0 --build-type=complete stage--with只编译某一个库--toolset开发工具stage库所在的目录 阅读全文
posted @ 2013-07-28 00:25 l851654152 阅读(277) 评论(0) 推荐(0)
摘要:模板一共有三种类型:1.第一种包含模型:包含模型是讲模板的定义和声明都放在头文件里(注:一般我们写的代码是将声明放在头文件里,实现放在cpp里,防止产生两份实现代码)缺点:包含模型会增加代码的量。如果在不同文件里有两个相同的类型调用则会产生两份相同实现,C++编译器可以自己处理这个问题。2.手动实例化示例:template void print_type(double const& x);缺点:造成混乱3.分离模型分离模型是在声明和定义处都使用export关键字即可,用的较少。 阅读全文
posted @ 2013-07-25 16:36 l851654152 阅读(246) 评论(0) 推荐(0)
摘要:1.对于T是自定义类型的,如果存在子类型则需要在模版内部加上typename示例代码:templateclass Myclass{ typename T::SubType *ptr;//需要加上typename不然编译器可能误解为是静态对象SubType和ptr相乘};2.类模版里对基类成员函数的调用使用BASE::exit();和this->,避免调用的是外部全局函数,但是在vc6.0上面这条规则是先调用的BASE里面的函数。示例代码:#include #include #include using namespace std;void exit(){ cout class BaseM 阅读全文
posted @ 2013-07-25 10:02 l851654152 阅读(2209) 评论(0) 推荐(0)
摘要:非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断。非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针。#include #include #include using namespace std;enum COLOR{WHITE,BLACK};template//OKint process (double v){ return v*name;}template class Myclass{};const char s1[] = "hello";extern const char s2[] 阅读全文
posted @ 2013-07-24 23:25 l851654152 阅读(3815) 评论(0) 推荐(0)
摘要:类模版的定义和声明都和函数模版类似:代码如下:template class Stack{public: void push(const T&); void pop(); T top()const; bool empty() const{return m_elems.empty();}private: vector m_elems; };类模版的使用时需要显示指定模版参数类型。类模版成员函数的是在调用的时候实例化templatevoid Stack::push(const T& elems){ m_elems.push_back(elems);}templatevoid Stac 阅读全文
posted @ 2013-07-24 14:43 l851654152 阅读(273) 评论(0) 推荐(0)
摘要:函数模版的定义:template T const& max(const T& a,const T b){ return a > b ? a:b;}int main(){ return 0;}函数模版的使用:#include #include using namespace std;template T const& max(const T& a,const T b){ return a > b ? a:b;}int main(){ int i = 7; cout << max(34,7) <<endl; double j = 阅读全文
posted @ 2013-07-24 07:56 l851654152 阅读(281) 评论(0) 推荐(0)
摘要:一.使用Templates的原因:例如我们要写一个算法,由于类型不同,我们不得不做一下工作。1.使用宏定义代替Templates不利于类型检查。2.将一些算法放在基类里,以后的扩展的子类都需要充基类继承这些算法,不利于维护和扩展。3.重复一遍有一遍的根据不同类型写出算法,显然是一个很糟糕的决定。二.引入模版的定义关键字template,引入类型参数的关键字typename/class尽量用typename,类型参数一般用U,T,V等。三.在编译过程中并不是把函数模版编译成能处理任何类型的实例,而是实例化模版参数的每种类型。四.在实例化之前检查模版是否有语法错误,在实例化期间检查是否所有调用都有 阅读全文
posted @ 2013-07-24 07:47 l851654152 阅读(348) 评论(0) 推荐(0)
摘要:设计模式的学习以及各种设计模式的C++实现已经告一段落了,解释器模式和迭代器模式,以及模版办法简单的看了一下。画UML图的时候再重点学习从今天开始学习Templates。 阅读全文
posted @ 2013-07-24 07:44 l851654152 阅读(165) 评论(0) 推荐(0)
摘要:状态模式原理:随着状态的变化,对象的行为也发生变化代码如下:#include #include #include using namespace std;class War;class State{public: virtual void fire(War *war) { }};class War{public: War(State* state):m_state(state),m_day(0){} void Setday(int day) { m_day = day; } int Getday() { return m_day; } void SetState(State *stat... 阅读全文
posted @ 2013-07-24 01:00 l851654152 阅读(257) 评论(0) 推荐(0)
摘要:观察者模式原理:当有新的消息产生时发送给观察者,和中介者模式的不同地方是中介者模式强调中介的作用以及中介双方的交互,观察者模式是主动调用观察者成员函数进行消息发送。代码如下:#include #include #include using namespace std;class Observer{public: virtual void Update() { }};class Blog{public: void attach(Observer *pobserver) { m_listObserver.push_back(pobserver); } void remove(Observe... 阅读全文
posted @ 2013-07-23 22:26 l851654152 阅读(244) 评论(0) 推荐(0)
摘要:策略模式原理:策略模式和简单工厂模式有点类似,只是简单工厂模式产生的是对象,策略模式产生的是根据对象产生的算法。代码如下:#include #include #include using namespace std;enum CACHE{FIFO,LRU,RANDOM};class ReplaceAlgorithm{public: virtual void replace(){}};class FIFOAlgorithm:public ReplaceAlgorithm{public: virtual void replace(){cout replace(); }private: Replac 阅读全文
posted @ 2013-07-23 13:02 l851654152 阅读(198) 评论(0) 推荐(0)
摘要:备忘录模式原理:将对象的私有数据存储在其他地方,以便重新加载代码如下:#include #include #include using namespace std;class GameRole;class Memeno{public: Memeno(int vitality = 0,int defense = 0,int attack = 0): m_vitality(vitality),m_defense(defense),m_attack(attack){} void show() { cout m_vecMemeno;};int main(){ GameRole role; Meme.. 阅读全文
posted @ 2013-07-23 12:18 l851654152 阅读(252) 评论(0) 推荐(0)
摘要:中间者模者模式原理:中介者维持所有要交互对象的指针或者对象,所有对象维持一个中介者的指针或者对象。#include #include using namespace std;class Mediator;class Person{public: virtual GetMessage(string message) { } virtual void SendMessage(string message) { } virtual void SetMediator(Mediator *pmdiator) { }protected: Mediator *m_pmediator; };class M.. 阅读全文
posted @ 2013-07-23 01:31 l851654152 阅读(209) 评论(0) 推荐(0)
摘要:#include #include using namespace std;class Receiver{public: void do_execute() { cout do_execute();}private: Receiver *m_preceiver;};int main(){ Command *pcmd = new Command(); pcmd->execute(); return 0;} 阅读全文
posted @ 2013-07-23 00:42 l851654152 阅读(182) 评论(0) 推荐(0)
摘要:职责链模式原理:职责链模式和装饰模式以及组合模式类似的地方是都维持着指向父类的指针,不同点是职责链模式每个子类都继承父类的指针及每个之类都维持着指向父类的指针,而组合模式与装饰模式是组合类鱼装饰类维持着指向父类的指针。代码如下:#include #include using namespace std;class Manager{public: Manager(string name,Manager* pmanager = NULL):m_name(name),m_pmanager(pmanager){} virtual void dealSalary(string name,int num. 阅读全文
posted @ 2013-07-22 21:38 l851654152 阅读(276) 评论(0) 推荐(0)
摘要:只能指针是代理模式的一种:智能指针实现需要注意的问题:1.构造函数指明显示构造。2.拷贝构造函数,先断开前一个指针,然后用之前指针的值初始化现在的指针。3.赋值函数需要先断开之前的指针,然后释放现在指针指向的内存,最后用之前的指针赋值现在的指针。4.参数是引用,避免产生临时对象。代码如下:#include #include /************************************************************************//* 代理模式的智能指针的实现 *//*********************************... 阅读全文
posted @ 2013-07-22 16:26 l851654152 阅读(284) 评论(0) 推荐(0)
摘要:#include #include #include #include using namespace std;enum COLOR{WHITE,BLACK};/************************************************************************//* 装饰模式的作用是为对象增加属性 *//************************************************************************/struct PiecePos{ int x; int y; PiecePos(in... 阅读全文
posted @ 2013-07-22 13:52 l851654152 阅读(212) 评论(0) 推荐(0)
摘要:外观模式原理:将复杂的子系统的结构封装起来,只提供客户一个简单的接口代码如下:#include #include #include using namespace std;/************************************************************************//* 装饰模式的作用是为对象增加属性 *//************************************************************************/class Scanner{public: void Scan(){co... 阅读全文
posted @ 2013-07-22 10:27 l851654152 阅读(295) 评论(0) 推荐(0)
摘要:装饰模式原理:给对象增加特性,这种特性是一种累加的效果代码如下#include #include #include using namespace std;/************************************************************************//* 装饰模式的作用是为对象增加属性 *//************************************************************************/class Phone{public: Phone(string name):m_nam... 阅读全文
posted @ 2013-07-22 02:01 l851654152 阅读(185) 评论(0) 推荐(0)
摘要:组合模式原理:组合模式的作用是讲继承同一父类的不同子类对象组合起来,形成一个树形的结构,例如公司的部门组织代码如下#include #include #include using namespace std;/************************************************************************//* 组合模式的作用是讲继承同一父类的不同子类对象组合起来 *//************************************************************************/... 阅读全文
posted @ 2013-07-22 01:04 l851654152 阅读(251) 评论(0) 推荐(0)
摘要:桥接模式与原理:将抽象部分与实现部分分离,使它们都可以独立的变化。最终的结果表现在实现类中。两者之间属于等价关系,即实现部分和抽象部分可以相互交换。代码如下#include using namespace std;class OS{public: virtual void install() { }};class WindowsOS:public OS{public: virtual void install() { cout install(); }private:};class ComputerApple:public Computer{public: virtual void im... 阅读全文
posted @ 2013-07-21 12:19 l851654152 阅读(236) 评论(0) 推荐(0)
摘要:适配器模式原理:适配器模式属于结构型模式,主要作用是完成功能的转换,1.通过一个类继承目标类。2.需要适配的类3.适配器代码如下:#include using namespace std;class Deque{public: void push_back(int x) { cout << "push from back of Deque" <<endl; } void pop_back() { cout << "pop from back of Deque" <<endl; } void push_fro 阅读全文
posted @ 2013-07-21 01:35 l851654152 阅读(248) 评论(0) 推荐(0)
摘要:建造者模式原理:建造模式主要是用于产生对象的各个组成部分,而抽象工厂模式则用于产生一系列对象,建造者模式而且要求这些对象的组成部分有序。代码如下:#include using namespace std;class Builder{public: virtual void buildHead(){} virtual void buildBody(){} virtual void buildLeftArm(){} virtual void buildRightArm(){} virtual void buildLeftLeg(){} virtual void buildRightLeg(){}} 阅读全文
posted @ 2013-07-21 00:47 l851654152 阅读(208) 评论(0) 推荐(0)
摘要:设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类代码如下:#include #include #include using namespace std;#define COREA 0#define COREB 1class Core{public: virtual void show(){}};class CoreA:public Core{public: virtual void show() { cout create(0); pcore->show(); return 0;}工厂方法模式原理: 阅读全文
posted @ 2013-07-20 22:16 l851654152 阅读(257) 评论(0) 推荐(0)
摘要:原理:拷贝自身对象实际上就是调用的拷贝构造函数,注意事项是这里的拷贝是深拷贝,即需要拷贝指针所指的内容#include #include #include class Resume{public: virtual Resume* Clone(){return NULL;} virtual ~Resume(){}protected: char *name;};class ResumeA:public Resume{public: ResumeA(const char* str); Resume* Clone(); ResumeA(const ResumeA& r); ~ResumeA() 阅读全文
posted @ 2013-07-20 21:10 l851654152 阅读(187) 评论(0) 推荐(0)
摘要:原理:将类的构造函数由pubic变为private或者protect,添加获取对象的public 成员函数,返回指向对象的静态指针。首先来一段简单的代码实现代码一class Singleton{public:static Singleton* instance(){ if (pInstance == NULL) { return new Singleton(); } return pInstance;}protected: Singleton() { }private: static Singleton* pInstance;};Singleton* Singleton::pInstance. 阅读全文
posted @ 2013-07-18 11:15 l851654152 阅读(227) 评论(0) 推荐(0)
摘要:第三章的总的原则:1.将重复性代码改到数组中,使用最简单的数据结构---数组来表示一段冗长的相类似的代码往往可以达到最佳效果2.封装复杂的结构时,使用抽象的术语对她进行定义,并将那些操作表示成一个类。3.尽可能地使用高级工具。超文本,名称-值对,电子表格,数据库4.让数据去构造程序。习题1代码实现:#include int income[5] = {2200,2700,3200,3700,4200};double lilu[5] = {0,0.14,0.15,0.16,0.17};int main(){ int incomevalue = 0; scanf("%d",&am 阅读全文
posted @ 2013-07-10 15:33 l851654152 阅读(440) 评论(0) 推荐(0)
摘要:问题A题目:给定一个包含40亿个随机排列的顺序文件,找到一个不在文件中的32位整数,在有足够内存的情况下应该如何解决该问题?如果有几个外部的临时文件可用,但是仅有几百字节的内存,又该如何解决?(1)对于有足够内存的情况,完全可以采用位图存储的方法,详细内容看《编程珠玑》第一章。(2)Ed Reingold 给出了另外一种解法。 问题的关键是只要找到一个数字,那么我们把问题简化一下,给定一个文件,里头最多包含16个4bit的整数,找到一个不在文件中的4bit整数。假设这十个数是1 2 3 4 5 7 6 9 8 10。 取出一个数字,如果是最高位为1,放到一个文件中,否则放到另外一个文件中。.. 阅读全文
posted @ 2013-07-09 22:29 l851654152 阅读(401) 评论(0) 推荐(0)
摘要:整个程序的思想就是: 1.每个整数有32位,那么它就可以表示32个数,分别对应每bit位为1. 2.然后把10000000个数分为1+N/BITSPERWORD组(相当于有这么多个桶),每组包含接近32个数。上面的解释可能仍不到位,那我们来看具体的函数:对于set函数,我们可以这样理解, arr[i>>SHIFT] |= (1#define BITPERWORD#define MASK 0x1F#define N 10000000#define SHIFT 5int a[N/BITPERWORD + 1];void clr_bit(int i){a[i>>SHIFT] 阅读全文
posted @ 2013-07-09 17:27 l851654152 阅读(210) 评论(0) 推荐(0)
摘要:http://www.codecho.com/reading-large-file-using-cpp/ 阅读全文
posted @ 2013-07-09 16:38 l851654152 阅读(155) 评论(0) 推荐(0)
摘要:scanf()函数的原理想象输入设备(键盘)连接着一个叫“缓冲”的东西,把缓冲认为是一个字符数组。当你的程序执行到scanf时,会从你的缓冲区读东西,如果缓冲区是空的,就阻塞住,等待你从键盘输入。现在假设你的缓冲区里有:abcd\n1234\n (其中\n是回车符)执行:scanf("%s",name);的时候,由于scanf是读数据直到看见空白符(空白符:指空格符、制表符、回车符)就停止的输入函数。所以执行后,把abcd存到了name中。缓冲区于是变成了 : \n1234\n接下来的执行就有问题了,如果遇到了:scanf("%d",&numbe 阅读全文
posted @ 2013-07-09 16:01 l851654152 阅读(565) 评论(0) 推荐(0)
摘要:操作系统使用不同的值作为文件结束符。Windows上我们通过键入ctrl+z键作为文件结束符。Unix系统中,包括Mac OS-X机器,通常用ctrl+d作为文件结束符。用VC++6.0的时候,要输入两次ctrl+z及回车才能作为输入结束。 阅读全文
posted @ 2013-07-09 15:14 l851654152 阅读(552) 评论(0) 推荐(0)
摘要:http://www.360doc.com/content/11/0826/13/7588214_143424472.shtml链接,装载都是基于数据结构ELF。 阅读全文
posted @ 2013-07-08 21:26 l851654152 阅读(126) 评论(0) 推荐(0)
摘要:Mysql./configure --prefix=/usr/local/mysql(注意/configure前有“.”,是用来检测你的安装平台的目标特征的,prefix是安装路径)#make(编译程序)(此处等待时间较长,不要关闭编辑器)#make install(安装程序)#/usr/local/mysql/bin/mysql_install_db --user=root(初始化数据库,用户mysql)#cp support-files/my-medium.cnf /etc/my.cnf(将MYSQL配置文档复制到/etc目录下保存为my.cnf,如果问是否覆盖原文件,输入“yes&quo 阅读全文
posted @ 2013-07-05 10:35 l851654152 阅读(254) 评论(0) 推荐(0)
摘要:vi里怎样跳转到某一指定行输入:行号:$跳到最后一行gg跳到第一行。 阅读全文
posted @ 2013-07-05 10:02 l851654152 阅读(402) 评论(0) 推荐(0)
摘要:init进程首先通过initable查看运行级别,然后运行rc.d下面的sysinit,然后调用rc,然后运行rc###连接到init.d下面的服务。自启动。chkconfig命令只是查看和设置服务的自动启动情况,并不能反映当前服务的状态.service iptables status可以查看到iptables服务的当前状态但是即使服务运行了,防火墙也不一定起作用,还得看防火墙规则的设置iptables -L 阅读全文
posted @ 2013-07-04 20:04 l851654152 阅读(207) 评论(0) 推荐(0)