代码改变世界

随笔档案-2012年03月

记录今晚的百度电面

2012-03-30 18:52 by Rollen Holt, 26 阅读, 收藏, 编辑
该文被密码保护。 阅读全文

C语言中的关于“位域”的说明(转载,有修改)

2012-03-29 11:55 by Rollen Holt, 893 阅读, 收藏, 编辑
摘要: 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为: struct 位域结构名 { 位域列表 };其中位域列表的形式为: 类型说明符 位域名:位域长度例如:struct bs{ in 阅读全文

C++查缺补漏4,赶紧的

2012-03-28 22:56 by Rollen Holt, 1119 阅读, 收藏, 编辑
摘要: 请说出const与#define 相比,有何优点?答案:1)const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。 2)有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。在8086 汇编下,逻辑地址和物理地址是怎样转换的?(Intel)答案:通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址,就得到了真正要访问的地址。当一个类A 中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为 阅读全文

C++查缺补漏3,赶紧的

2012-03-28 22:30 by Rollen Holt, 491 阅读, 收藏, 编辑
摘要: 如何判断一段程序是由C 编译程序还是由C++编译程序编译的? 答案: #ifdef __cpluspluscout<<"c++";#elsecout<<"c";#endif如何打印出当前源文件的文件名以及源文件的当前行号? 答案: cout << __FILE__ ; cout<<__LINE__ ; __FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文... 阅读全文

C++查缺补漏2,赶紧的

2012-03-28 21:29 by Rollen Holt, 527 阅读, 收藏, 编辑
摘要: 先来看一段代码把: #include <iostream>#include <typeinfo>using namespace std;void foo(void){ unsigned int a = 6; int b = -20; (a+b > 6) ? puts("> 6") : puts("<= 6");}int _tmain(int argc, _TCHAR* argv[]){... 阅读全文

一道面试题: 预处理器标识#error的目的是什么?

2012-03-28 20:51 by Rollen Holt, 4902 阅读, 收藏, 编辑
摘要: 编译程序时,只要遇到#error就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。下面举个例子:程序中往往有很多的预处理指令#ifdefXXX...#else#endif当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了XXX时,就可以改成如下这样进行编译:#ifdefXXX...#error"XXXhasbeendefined"#else#endif这样,如果编译时出现错误,输出了XXXhasbeendefined,表明宏XXX已经被定义了。用处就是这样 阅读全文

C++查缺补漏,赶紧的

2012-03-28 20:50 by Rollen Holt, 772 阅读, 收藏, 编辑
摘要: c++中 switch支持的数据类型为实型 (麻烦朋友们给我解释一下什么是实型) 支持的有int long unsigned short enum类型,不支持的是:float double string 回答下面的问题: Void GetMemory(char **p, int num){*p = (char *)malloc(num);}void Test(void){char *s... 阅读全文

几种函数调用方式

2012-03-28 20:19 by Rollen Holt, 947 阅读, 收藏, 编辑
摘要: __cdecl 是C DECLaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 _stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是this指针。这些堆栈中的参数由被调用的函数在返回后清除,使用的指令是 retnX,X表示参数占用的字节数,CPU在ret之后自动弹出X个字节的堆栈空间。称为自动清栈。. 阅读全文

一个类的实例化对象所占空间的大小

2012-03-28 19:34 by Rollen Holt, 5616 阅读, 收藏, 编辑
摘要: 注意不要说类的大小,是类的对象的大小.首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。如果Class A;A obj;那么sizeof(A)==sizeof(obj)那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等于所有非静态成员大小的总和。为什么是大于等于而不是正好相等呢?超出的部分主要有以下两方面:1) C++对象模型本身对于具有虚函数的类型来说,需要有一个方法为它的实体提供类型信息(RTTI)和虚函数入口,常见的方法是建立一个虚函数入口表,这个表可为相同类型的 阅读全文

关于“同学疯狂投递简历”的一点点随想

2012-03-28 17:12 by Rollen Holt, 589 阅读, 收藏, 编辑
摘要: 写这篇文章的缘由呢,其实是消磨时间。对,就怎么简单,因为我在等邮件。也许一些比较熟悉我的朋友会说:“您不是一个大忙人吗,怎么会浪费时间呢?”。因为我在很多朋友们的心中就是一个大忙人。是的,我也承认自己一直很忙,有时候忙的吃饭都是带回到宿舍来吃的。因为自己现在已经大三了,没有太多的时间去浪费,因为还有很多的事情等着我去做,比如学业,比如最近大家一直关心的暑假实习的问题,等等的这些我都要准备。或许对于一些读研的朋友,她们更加关心的将会是复习,报各种考研班(虽然我不是很赞成报考研班)啥的。出国的朋友准备外语什么的,反正是大家都在忙自己的事情,就如同我们宿舍,1个读研的,一个准备出国的,2哥准备工作的 阅读全文

const_iterator和const iterator的区别

2012-03-27 21:14 by Rollen Holt, 632 阅读, 收藏, 编辑
摘要: #include <iostream>#include <string>#include<fstream>#include <algorithm>#include <iterator>#include <vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ vector<int> myVec; myVec.push_back(0); myVec.push_back(1); myVec.push_back(2); copy( myVec. 阅读全文

boost 学习笔记

2012-03-27 11:05 by Rollen Holt, 2927 阅读, 收藏, 编辑
摘要: 先来看看如何赋值把: #include <iostream>#include <vector>#include <string>#include<deque>#include <set>#include <map>#include <boost/assign.hpp>using namespace std; int _tmain(int argc, _TCHAR* argv[]){ us... 阅读全文

Boost中的一些实用技术

2012-03-26 22:11 by Rollen Holt, 994 阅读, 收藏, 编辑
摘要: 类型推断: #include <iostream>#include <vector>#include <string>#include <boost/typeof/typeof.hpp>using namespace std;vector<string> func(){ vector<string> v(10); return v;}int _tmain(int argc, _TCHAR* ar... 阅读全文

boost date_time

2012-03-26 20:05 by Rollen Holt, 2370 阅读, 收藏, 编辑
摘要: #include <iostream>#include <boost/date_time/gregorian/gregorian.hpp>#include <boost/static_assert.hpp>using namespace std;using namespace boost::gregorian;int _tmain(int argc, _TCHAR* argv[]){ date ... 阅读全文

progress_display

2012-03-26 18:10 by Rollen Holt, 352 阅读, 收藏, 编辑
摘要: #include <iostream>#include <vector>#include<boost/progress.hpp>using namespace std;using namespace boost;int _tmain(int argc, _TCHAR* argv[]){ vector<int> v; progress_display pd(10000); for(int i=0... 阅读全文

Boost–progress_timer

2012-03-26 17:43 by Rollen Holt, 605 阅读, 收藏, 编辑
摘要: progress_timer继承自timer,但是精度为2,为了扩展精度,我们自己实现一个类,代码如下: #include <iostream>#include<boost/progress.hpp>#include <boost/static_assert.hpp>using namespace std;using namespace boost;template<int N=2>cla... 阅读全文

boost学习之 时间和日期 timer

2012-03-26 17:23 by Rollen Holt, 1272 阅读, 收藏, 编辑
摘要: #include <iostream>#include<boost/timer.hpp>using namespace std;using namespace boost;int _tmain(int argc, _TCHAR* argv[]){ timer t; //构造函数自动启动计时工作 cout<<"max timespan(hours): "<<t.elapsed_max()/3600<<endl; cout<<"min timespan(seconds): "<&l 阅读全文

复习计划

2012-03-25 22:50 by Rollen Holt, 532 阅读, 收藏, 编辑
摘要: 还有3个月暑假就到了,到时候自己又要开始自己的实习之路了,已经大三下学期了,得好好加油了。这3个月之内,要全面的从基础做起,踏踏实实的,不能眼高手低。下面是自己大致的一些复习计划:算法和数据结构基本每天都要复习,尤其是算法这一块,不能拉下。但是算法要以实用为主。本周重新复习一下STL然后是BOOST,接着是linux,Python。下面贴一下自己最近的书单:《C++必知必会》 (已复习完,但是还需要继续看)《泛型编程与STL》 (正在看,估计周3就完成)《STL源码剖析》 (预期到周日完成)《超越C++标准库--BOOST》 (下一周完成)其他的计划待定...... 阅读全文

面试题

2012-03-25 18:11 by Rollen Holt, 2342 阅读, 收藏, 编辑
摘要: 微软面试题:地球上有多少个满足这样条件的点站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点?北极点满足这个条件。距离南极点很近的一个圈上也满足这个条件。在这个圆圈上,向南走一公里,然后向东走一公里恰好绕南极点一圈,向北走一公里回到原点。所以地球上总共有无数点满足这个条件。谷歌面试题:判断一个自然数是否是某个数的平方判断一个自然数是否是某个数的平方。当然不能使用开方运算。假设待判断的数字是 N。方法1:遍历从1到N的数字,求取平方并和N进行比较。如果平方小于N,则继续遍历;如果等于N,则成功退出;如果大于N,则失败退出。复杂度为O( 阅读全文

《C++必知必会》读书笔记4

2012-03-25 13:53 by Rollen Holt, 403 阅读, 收藏, 编辑
摘要: int *f(); //一个返回值为int* 的函数int (*f)(); //一个函数指针,指向一个返回类型为int的并且无参数的函数const int N=12;int *a[N]; //首先,提醒这段代码在c中不行。 这个是一个具有N个int * 元素的数组int (*a)[N]; //一个指针,指向一个具有N个int元素的数组。int(**p)[N]; //一个指针,指向一个指针,后者指向一个具有N哥int元素的数组int *(*p)[N]; //一个指针,指向一个具有N个int * 元素的数组int (**const p)()const =0; //一个常量指针,指向一个指向函数的指 阅读全文

《C++必知必会》读书笔记3

2012-03-25 12:45 by Rollen Holt, 391 阅读, 收藏, 编辑
摘要: 指向数据成员的“指针”并非指针。#include <iostream>using namespace std;class A{public: A(){ //do nothing here. } A(int num,double num2){ this->num=num; this->num2=num2; } int num; double num2;};int _tmain(int argc, _TCHAR* argv[]){ A* pA=new A(5,6); int A::* p=&A::num; //p是一个指针,指向A的一个int成员 double A: 阅读全文

《C++必知必会》读书笔记2

2012-03-24 23:54 by Rollen Holt, 490 阅读, 收藏, 编辑
摘要: 在类X的非常量成员函数中,this指针的类型为 X *const .也就是说他是指向非常量X的常量指针。 但是在类X的常量成员函数中,this的类型为const X* const . 这就是常量成员函数和非常量成员函数的区别。 类的非静态数据成员可以被声明为mutable,这将容许她们的值可以被这个类的常量成员函数(也包括非常量成员函数)修改。 如果一个类声明了一个或者多个虚函数,那么... 阅读全文

《C++必知必会》读书笔记1

2012-03-24 21:16 by Rollen Holt, 502 阅读, 收藏, 编辑
摘要: 指针和引用的区别: 1)不存在空引用 2)所有的引用都需要初始化 3)一个引用始终指向对他初始化的那个对象 数组作为参数的时候,会退化为指针。同样的例子也发生在函数上。一个函数型参数会退化为一个函数指针。 由于数组形参中数组的边界被忽略了,所以在声明的时候最好将其忽略。然而如果函数期望接受一个指向一个元素序列的指针作为参数的时候,而不是接受单个的指针,那么最好采... 阅读全文

对于选择PM,UE的软件毕业生的一点点建议

2012-03-24 12:16 by Rollen Holt, 891 阅读, 收藏, 编辑
摘要: 最近发现自己身边的很多人,主要集中在女生这一块。面对就业的压力,因为自己技术不行,可能本身也不喜欢技术把。所以大算走PM(注意,不是产品经理而且市场这一块,只要提需求)UE(用户交互这一块)这条路线。然后在剩下的3个月内,我看见她们买了很多的书,比如《人人都是产品经理》,《用户交互》等等的名字听起来很牛逼的书籍,整天什么事情也不做,就在那里狂看。 其实我想说,需求和用户体验是一个人人都认为自己可以胜任的,但是实际上不是这样的岗位。算是我为那些朋友们泼一盆冷水把。 借用程序员的一句名言:“程序员分3类,一类是学院派,一类是实干派,最后一类是面试达人”。对于PM和UE也是一样的。你属于哪一类... 阅读全文

微软面试题:利用天平砝码,三次将140克的盐 分成50、90克两份?

2012-03-23 23:05 by Rollen Holt, 3722 阅读, 收藏, 编辑
摘要: 有一个天平,2克和7克砝码各一个。如何利用天平砝码在三次内将140克盐分成50,90克两份。 第一种方法: 第一次:先称 7+2克盐 (相当于有三个法码2,7,9) 第二次:称2+7+9=18克盐 (相当于有2,7,9,18四个法码) 第三次:称7+18=x+2,得出x是23,23+9+18=50克盐. 剩下就是90克了. 第二种方法: 1.先把140克盐分为两... 阅读全文

微软面试题:写程序找出二叉树的深度

2012-03-23 22:47 by Rollen Holt, 1014 阅读, 收藏, 编辑
摘要: 一个树的深度等于max(左子树深度,右子树深度)+1。可以使用递归实现。 int DepthOfTree(BiTreeNode* root){ if(NULL == root) { return 0; } return max(DepthOfTree(root->leftChild), DepthOfTree(root->rightChild))+1;}也可以采用下面的思路:类似于递归的... 阅读全文

微软面试题:编程实现两个正整数的除法

2012-03-23 22:42 by Rollen Holt, 2869 阅读, 收藏, 编辑
摘要: 编程实现两个正整数的除法,当然不能用除法操作符。 // return x/y. int div(const int x, const int y) { .... } // return x/yint div(const int x, const int y) {int left_num = x;int result = 0;while (left_num >= y) ... 阅读全文

谷歌面试题:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数

2012-03-23 22:37 by Rollen Holt, 3435 阅读, 收藏, 编辑
摘要: 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。 我的想法: 编写一个生成0和1的随机函数: step1. 调用给定的随机函数original_rand()生成一个数 如果==3 goto step1 如果<3 return 0 如果>3 return 1 编写一个生成1到7的随机函数 调用生成0和1的随机函数3次,构成000或001或010.... 阅读全文

百度面试题:从输入url到显示网页,后台发生了什么?

2012-03-23 22:09 by Rollen Holt, 22638 阅读, 收藏, 编辑
摘要: 参考http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/wenanry/archive/2010/02/25/1673368.html 原文:http://igoro.com/archive/what-really-happens-when-you-nav... 阅读全文

微软面试题:正则表达式提取链接地址

2012-03-23 21:59 by Rollen Holt, 4118 阅读, 收藏, 编辑
摘要: 写出正则表达式,从一个字符串中提取链接地址。比如下面字符串中 "IT面试题博客中包含很多 <a href=http://hi.baidu.com/mianshiti/blog/category/微软面试题> 微软面试题 </a> " 则需要提取的地址为 " http://hi.baidu.com/mianshiti/blog/category/微软面试题 " 在python中: ... 阅读全文

微软面试题:反序一个单向链表

2012-03-23 21:58 by Rollen Holt, 1067 阅读, 收藏, 编辑
摘要: 反序一个单向链表 class Node {Node* next;}// Return the new start after reversion. Node* ReverseList (Node* start) { }#include <stdio.h> typedef struct snode{ char data; struct snode *next;}node; node *reser... 阅读全文

谷歌面试题:1024! 末尾有多少个0?

2012-03-23 21:50 by Rollen Holt, 1470 阅读, 收藏, 编辑
摘要: 解答思路: 末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数。 是5的倍数的数有: 1024 / 5 = 204个 是25的倍数的数有:1024 / 25 = 40个 是125的倍数的数有:1024 / 125 = 8个 是625的倍数的数有:1024 / 625 = 1个 所以1024! 中总共有204+40... 阅读全文

新浪面试题:删除字符串中多余的空格

2012-03-23 21:43 by Rollen Holt, 826 阅读, 收藏, 编辑
摘要: 题目描述: 给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。 比如 “ I like http://hi.baidu.com/mianshiti ” 会变成 "I like http://hi.baidu.com/mianshiti"。 void RemoveExtraSpace(char* str){ bool keep_space = fals... 阅读全文

UVa 10010 Where's Waldorf?

2012-03-21 23:01 by Rollen Holt, 946 阅读, 收藏, 编辑
摘要: #include<stdio.h>#include<string.h>#define maxn 57long test,m,n,k;char r[maxn][maxn];const long xd[]={-1,-1,0,1,1,1,0,-1},yd[]={0,1,1,1,0,-1,-1,-1};void search(const char *a,long &x,long &y){ long pos,xx,yy; for(long i=1;i<=m;i++) for(long j=1;j<=n;j++) if(r[i][j]==a[0]) { 阅读全文

UVa 10082 WERTYU

2012-03-21 22:48 by Rollen Holt, 425 阅读, 收藏, 编辑
摘要: #include<stdio.h>int main(){ /* freopen("data.in","r",stdin); freopen("data.out","w",stdout); //*/ const char s[]="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; char c; while... 阅读全文

UVa 10361 Automatic Poetry

2012-03-21 22:46 by Rollen Holt, 380 阅读, 收藏, 编辑
摘要: #include<iostream>#include<string>using namespace std;int main(){ long n; cin>>n; getchar(); for(long cas=1;cas<=n;cas++) { string a,b,ans; getline(cin,a); for(long i=0;a[i];i++) if(a[i]!='<'&&a[i]!='>') cout<<a[i]; cout<<endl; //... 阅读全文

UVa 401 Palindromes

2012-03-21 22:40 by Rollen Holt, 439 阅读, 收藏, 编辑
摘要: 题目大意:Palindrome的定义是,一个字符串从左向右和从右向左读是一样的;Mirrored string的定义是,一个字符串左右对称;Mirrored palindrome就是既palindrome又mirrored的字符串。对称的关系表题目中已给出。#include<stdio.h>#include<string.h>const char one[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";const char two[]="A 3 HIL JM O 2TUVWXY51SE Z 8 "; 阅读全文

extern "C"的用法解析

2012-03-20 23:29 by Rollen Holt, 99200 阅读, 收藏, 编辑
摘要: 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。2.从标准头文件说起 某企业曾经给出如下的一道面试题: 面试题 为什么标准头文件都有类似以下的结构? #ifndef __INCvxWorksh #define __INCvxWorksh #i... 阅读全文

C++ 枚举类型的思考

2012-03-19 08:11 by Rollen Holt, 707 阅读, 收藏, 编辑
摘要: C++ 中的枚举类型继承于 C 语言。就像其他从 C 语言继承过来的很多特性一样,C++ 枚举也有缺点,这其中最显著的莫过于作用域问题——在枚举类型中定义的常量,属于定义枚举的作用域,而不属于这个枚举类型。例如下面的示例:enum FileAccess { Read = 0x1, Write = 0x2,};FileAccess access = ::Read; // 正确FileAccess access = FileAccess::Read; // 错误C++枚举的这个特点对于习惯面向对象和作用域概念的人来说是不可接受的。首先,FileAccess::Read 显然更加符合程序员的直觉,因 阅读全文

c++中sizeof的分析

2012-03-19 08:08 by Rollen Holt, 5418 阅读, 收藏, 编辑
摘要: sizeof是何方神圣sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t. 其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为. 阅读全文

C++ enum类型的一个更好的用法

2012-03-19 08:07 by Rollen Holt, 3797 阅读, 收藏, 编辑
摘要: enum类型是c++的一个基本的类型,用于声明可以枚举的常量.相对于C#的enum, c++的enum有几个缺陷:<!--[if !supportLists]-->1<!--[endif]-->不支持组合特性,也即FlagsAttribute属性;<!--[if !supportLists]-->2<!--[endif]-->不支持toString方法,转换为字符串需要特别的函数实现;<!--[if !supportLists]-->3<!--[endif]-->不支持命名空间的特性.前面的两个比较明显,我们只是讨论第3个 阅读全文

C++ template学习总结6

2012-03-08 11:53 by Rollen Holt, 512 阅读, 收藏, 编辑
摘要: 对于基本类型来说,并没有一个default模式来讲他们初始化为有意义的值,没有初始化的变量,其指都是未定义的,但是在模板这一块呢?我们可以采用下面的形式:template <typename T> void foo() { T x = T(); // x is zero (or false)ifT is a built-in type } 对于class template我们可以采用下面例子的方式:template <typename T> class MyClass { private: T x; public: MyClass() : x() { /... 阅读全文

c++ template归纳学习5

2012-03-08 11:20 by Rollen Holt, 550 阅读, 收藏, 编辑
摘要: 双重模板参数: 我们还是以前几篇中的Stack为例子i:代码如下: template <typename T, template <typename ELEM> class CONT = std::deque > class Stack { private: CONT<T> elems; // elements public: voi... 阅读全文

C++ template 学习归纳总结4

2012-03-08 10:57 by Rollen Holt, 521 阅读, 收藏, 编辑
摘要: 我们在这篇文章来说说typename关键字吧。这个关键字是在c++的标准化过程中引入的,目的在于说明template中的某个表示符号是一个类型,而不是其他的东西,看下面的代码:template <typename T> class MyClass { typename T::SubType * ptr; … }; 第一个typename我就不多说了,大家都知道,我来说一下第二个。他的意思是说T::SubType是class T内部定义的一个类型,从而ptr是一个指向【T:SubType类型】的指针。如果在上面的代码中,没有第二个typename关键字的话,编译器会以为SubType 阅读全文

c++ template学习总结3

2012-03-08 10:03 by Rollen Holt, 666 阅读, 收藏, 编辑
摘要: 和往常一样,先来看一段代码: #include <stdexcept> template <typename T, int MAXSIZE> class Stack { private: T elems[MAXSIZE]; // elements int numElems; // current number of elements ... 阅读全文

博客园配置windows live writer,实现本地代码高亮

2012-03-08 07:43 by Rollen Holt, 4971 阅读, 收藏, 编辑
摘要: 你是否还在为只能用浏览器在博客后台写文章而苦恼?你是否还在纠结于live writer没有代码高亮而苦恼?现在一切都能解决:其实博客园支持SyntaxHighlighter代码着色,可以用相应的Live Writer代码着色插件进行代码着色。他们推荐的代码高亮插件是:推荐代码着色插件:Source Code plugin for SyntaxHighlighter。:Windows Live Writer下载地址:http://download.live.com/writer。但是无法在本地编写代码的时候就能够做到代码高亮,而且在本地预览的时候也没有代码高亮,只有发布在博客之后用浏览器打开的时 阅读全文

C++ template 学习归纳2

2012-03-07 16:15 by Rollen Holt, 616 阅读, 收藏, 编辑
摘要: 关于c++中的类模板,常见的形式为:template<typename T>class className{ //...};比如笔者在这里举一个例子:#include <iostream>#include<vector>#include <stdexcept>template<typename T>class stack{private: std::vector<T> elems;public: void push(T const&); void pop(); T top() const; bool empty() 阅读全文

C++.Templates学习总结归纳1

2012-03-07 14:22 by Rollen Holt, 643 阅读, 收藏, 编辑
摘要: 函数模板首先我们来看看函数模板,一个函数模板(function template)代表一族函数,其表现和一般的函数一样,只是其中的某些元素在编写的时候还不知道,也就是说这些还不知道的元素,我们将其参数化了。例如下面的返回两个数中的较大者:template<class T>inline T const& max(T const& a,T const& b){ return a>b?a:b;}当然,上述代码中的class也可以用typename所代替,但是不能使用struct代替。不过一般建议使用typename。举个可以实际运行的例子:#include 阅读全文

C++中四种显示类型转换总结

2012-03-05 20:21 by Rollen Holt, 559 阅读, 收藏, 编辑
摘要: #include <iostream>using namespace std;/* *四种显示类型转换 **/int main(){ /* static_case 类型转换*/ double a=1.1213; int b=static_cast<int>(a); class base{}; class father:public base{}; father f; base ba=static_cast<base>(f); /*reinterpret_cast类型转换*/ //基本类型的指针类型转换 double c=12.123; double* pc= 阅读全文