文章分类 -  c++进阶

摘要:common.cpp中有一条#pragmacomment(lib,"common.lib"),其中common.cpp和common.lib处于同一个名为common的文件夹。而工程文件在其他文件夹,编译的时候,编译器从工程文件的同级目录查找common.lib,结果当然是找不到了。首先,由于这个common文件夹中的文件是所有人共享的,并不是每一个人的common绝对路径都相同,所以不能使用绝对路径链接lib。另外,由于多个项目使用这个common文件夹,但是它们的位置也各不相同,所以也不能使用相对于工程目录的相对路径。但是至少common.cpp和common.lib是 阅读全文
posted @ 2013-04-15 17:30 springbarley 阅读(10833) 评论(0) 推荐(0)
摘要:KMP算法详解 Program Impossible | 2006-11-29 20:02| 133 Comments | 本文内容遵从CC版权协议 转载请注明出自matrix67.com如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉 阅读全文
posted @ 2012-10-27 21:39 springbarley 阅读(166) 评论(0) 推荐(0)
摘要:在介绍KMP算法之前,先介绍一下BF算法。一.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。 举例说明: S: ababcababa P:ababaBF算法匹配的步骤如下 i=0 i=1 i=2 i=3 i=4 第一趟:ababcababa 第二趟:ababcababa 第三趟:ababcababa 第四趟:ababcababa 第五趟:ababcababa ababa ababa abab.. 阅读全文
posted @ 2012-10-27 21:37 springbarley 阅读(178) 评论(0) 推荐(0)
摘要:声明:这是本菜在学习二分图相关知识的时候神小花儿推荐的课件中的知识。现在整理上来和大家分享。二分图相关问题:二分图定义及判定二分图最大匹配二分图最小覆盖二分图最大独立集二分图最小路径覆盖二分图最优匹配稳定婚姻问题一、定义及判定:定义:二分图中,顶点可以分为两个集合X和Y,每一条边的两个顶点都分别位于X和Y集合中判定:利用BFS或者DFS进行黑白染色,共享一边的两点异色,检查是否存在矛盾图G为二分图的充要条件是图中不含奇环二、二分图最大匹配定义:匹配是二分图中边的集合,且集合中的任意两条边没有公共点,包含边数最多的匹配就是最大匹配匈牙利算法:1、概念:交错路对于一个匹配M,如果能找到一条奇数长度 阅读全文
posted @ 2012-10-27 16:48 springbarley 阅读(411) 评论(0) 推荐(0)
摘要:关于C语言中继承和多态的实现 分类: C/C++ 2008-10-03 01:41 1556人阅读 评论(1) 收藏 举报 以下的内容综合了多篇文章,加上一点自己的理解而成。目的为了给自己阅读他们文章后做一个笔记。在末尾给出了这些文章的地址。 多态的实现可以采用以下几种方式: (1)使用 vod * (万能指针)来实现“编译时多态”。 (2)使用函数指针来实现“运行时多态”。 (3)使用型如struct struct_name{ ............................... char temp[0]; //或者char *temp; };这种形式。对于(1)举例如下:void 阅读全文
posted @ 2012-10-16 00:12 springbarley 阅读(319) 评论(0) 推荐(0)
摘要://c语言面向对象#include<stdio.h>#include<stdarg.h>#include<stdlib.h>typedef enum {point,circle} shape_type;//两种图形类型,点和圆typedef struct{//定义图像 shape_type type;//图形的标示点和圆 void (*destory)(void *);//销毁图像函数 void (*draw)(void *);//绘制图像函数}shape_t;typedef struct{//点 shape_t common;//类型 int x;//横坐 阅读全文
posted @ 2012-10-16 00:10 springbarley 阅读(185) 评论(0) 推荐(0)
摘要:1. 概述1970年,IBM的研究员E.F.Codd博士在刊物《Communication of the ACM》上发表了一篇名为“A Relational Model of Data for Large Shared Data Banks”的论文,提出了关系模型的概念,标志着关系数据库的诞生,随后几十年,关系数据库及其结构化查询语言SQL成为程序员必须掌握的基本技能之一。2005年4月,Jeffrey Dean和Sanjay Ghemawat在国际会议OSDI上发表“MapReduce: Simplified Data Processing on Large Cluster”,标志着goog 阅读全文
posted @ 2012-08-14 00:35 springbarley 阅读(358) 评论(0) 推荐(0)
摘要:输出一个数的二进制表示:从最高位开始,依次输出。//输出n的二进制表示voidBinaryPrint(intn){for(inti=0;i<32;++i){cout<<((n&0x80000000)==0x80000000);n=n<<1;}cout<<endl;}输出一个数二进制表示中1的个数:n&(n-1)把n的最后一个变为0,因为n-1会使n最后一个1变为0,这个1后面的0变为1。//判断n有多少位是1intCheckBits(intn){intret=0;while(0!=n){n=n&(n-1);++ret;}retu 阅读全文
posted @ 2012-08-13 23:27 springbarley 阅读(1496) 评论(0) 推荐(0)
摘要:待续…… 阅读全文
posted @ 2012-08-12 22:43 springbarley 阅读(266) 评论(0) 推荐(0)
摘要:1 在计算机系统中,数值一律用补码来表示(存储). 使用补码,可以将符号位和其他位统一处理;同时,减法也可按加法来处理.另外,两个用补码表示的数据相加时候,如果最高位(符号位)有进位,则进位被舍弃. 2 补码与原码的转换过程几乎是相同的 数值的补码表示也分两种情况: (1)正数的补码:与原码相同. 例如,+9的补码是00001001 (2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1 例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码 0000111按位取反为1111000;再加1,所以-7的补码是11... 阅读全文
posted @ 2012-08-10 23:00 springbarley 阅读(1482) 评论(0) 推荐(0)
摘要:#include "ctype.h"下的isalnum(char|unsigned)函数,里面有个断言assert((unsigned) (c+1) <=256)所以,传递的char类型是无符号的。如果要传递signed char,那么要显示的转换下。signed char到unsigned char会丢失;请看下面:unsigned char和char的区别和转换本质上两种类型都占一个字节。作为字符使用时,都是存储字符的ASCII码。比如:unsigned char uc='a';char c='a';printf("%d 阅读全文
posted @ 2012-08-10 22:23 springbarley 阅读(146) 评论(0) 推荐(0)
摘要:1.map的key如果是个自定义的数据类型,那么这个数据类型需要重载比较函数,2.通过map的const_iterator指针得到的first也是一个const对象,而const对象只能访问const成员函数。所以要注意这个对象里面对应的成员函数的声明应该是const的。3.这里的iter->first返回的一个const对象,而const对象只能调用const成员函数,所以get_Bgram()应声明为const的成员函数4.const_iterator和const iterator的区别需要看以前的c++进阶文章。5.const_iterator指针必须指向const map< 阅读全文
posted @ 2012-08-10 00:05 springbarley 阅读(131) 评论(0) 推荐(0)
摘要:reinterpret_cast,const_cast,static_cast,dynamic_cast 显式类型转换Cpp代码#include<iostream.h>intmain(void){//reinterpret_cast//将一个类型指针转换为另一个类型指针,这种在转换不修改指针变量值数据存放格式//只需在编译时重新解释指针的类型,他可以将指针转化为一个整型数但不能用于非指针的转换doubled=9.3;double*pd=&d;int*pi=reinterpret_cast<int*>(pd);classA{};classB{};A*pa=newA 阅读全文
posted @ 2012-08-09 22:56 springbarley 阅读(192) 评论(0) 推荐(0)
摘要:先说一下C语言中fseek()的功能:函数原型:int fseek(FILE *fp, LONG offset, int origin)参数含义:fp 文件指针 offset 相对于origin规定的偏移位置量 origin 指针移动的起始位置,可设置为以下三种情况: SEEK_SET 文件开始位置 SEEK_CUR 文件当前位置 SEEK_END 文件结束位置C++中seep()和seekg()函数功能seekp:设置输出文件流的文件流指针位置seekg:设置输入文件流的文件流指针位置函数原型:ostream& seekp( streampos pos );ostream& 阅读全文
posted @ 2012-08-09 22:47 springbarley 阅读(944) 评论(0) 推荐(0)
摘要:Unicode 的编码和实现 大概来说,Unicode 编码系统可分为1.编码方式和2.实现方式两个层次。编码方式 Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位,例如:"字"的码位是23383。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。 通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或称ISO/IEC 1064 阅读全文
posted @ 2012-08-09 20:57 springbarley 阅读(209) 评论(0) 推荐(0)
摘要:16进制用0x表示在C中 二进制没有直接的表示方法 八进制是以0开头来表示八进制数要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,将各单位对照出16进制的值即可。 2进制 0000 0001 0010 0011 0100 0101 0110 0111 16进制 0 1 2 3 4 5 6 7 (0X0123467)2进制 1000 1001 1010 1011 1100 1101 1110 1111 16进制 8 9 a(10) b(11) c(12) d(13) e(14) f(15)(0X89abcde) 0x表示十六进制二进制0b开头八进制0o开头十进制0d开头或者 阅读全文
posted @ 2012-08-09 20:41 springbarley 阅读(1285) 评论(1) 推荐(0)
摘要:C++:在迭代中删除map的成员 首先要清楚一点,迭代器相当于是容器上的指针,容器可以自己管理内 存,因此迭代器可能失效。如果你在不知情的情况下使用了失效的迭代器,后果是不可预料的。可能程序立即崩掉,也可能什么事都没有发生。崩掉了算你 幸运,因为你至少知道出了问题,不然有你受的。回到正题,我想说什么呢?比如: 程序代码map<string,int> theMap;// add something to theMap...for(auto iter1 = theMap.begin(); iter1 != theMap.end(); ++iter1){ if(iter1->sec 阅读全文
posted @ 2012-07-22 17:55 springbarley 阅读(964) 评论(0) 推荐(0)
摘要:NULL为0,null不存在.c语言中“\0”与NULL 的区别?他们在字符串中呢?例如 while(*pf)while(*pf!=0)有什么区别?\0\为转义符,后跟数字为八进制,\0就是表示数字0NULL在头文件的定义也是0,没区别。它们指的都是ASCII字符集中的第一个字符,标志“空”的一个状态字。while(*pf)while(*pf!=0)效果也一样,都是判断指针为空(假)做为终止循环的条件。指针这种用法一般是在调用函数中,会传递一个指针,然后返回已指向目标的指针,用户通过该指针就可以操纵所需功能了。如果调函数失败,返回的就是空指针。这可指导用户,对失败情况做另外的处理。一般NULL 阅读全文
posted @ 2012-06-28 18:47 springbarley 阅读(342) 评论(0) 推荐(0)
摘要:先看一个例子:#include <vector>template<typename T>class Foo {};template<typename T>void method(){std::vector<Foo<T> > vecFoo;std::vector<Foo<T> >::iterator iter = vecFoo.begin();}编译是通不过的。解决办法:typename std::vector<Foo<T> >::iterator iter = vecFoo.begin( 阅读全文
posted @ 2012-06-21 15:57 springbarley 阅读(257) 评论(0) 推荐(0)