摘要:
下面是原题:表达式求值,一个字符串只由'+','-',和‘0’-‘9’组成,并且'+','-'只作为二元运算符。bool calculate(const char* exp, int &result);想了想,这个用STL做很简单,因为只有+号和-号,没有其他符号,只要从左向右即可,不需要用栈。存操作数的用双端队列,存操作符的用普通队列先进先出即可。下面是我的解决代码:#include <iostream>#include <string>#include <deque>#include 阅读全文
posted @ 2011-05-11 22:56
微型葡萄
阅读(381)
评论(0)
推荐(0)
摘要:
微软的Visual Studio 2008(VS2008)提供了一个新的选项,给用户显示C++对象在内存中的布局。这个选项就是/d1reportSingleClassLayout。具体使用方法如下,在写好相应的cpp文件之后,需要启动VS2008的命令行工具“Visual Studio 2008 Command Prompt”,切换到cpp文件所在目录之后,输入如下的命令:cl [filename].cpp /d1reportSingleClassLayout[className]cl当然就是MS的编译器咯;[filename].cpp就是你所想要查看的class所在的cpp文件(class定 阅读全文
posted @ 2011-05-11 22:56
微型葡萄
阅读(1425)
评论(0)
推荐(0)
摘要:
【概念】a) 作用域。作用域有大小之分。比如全局作用域大于局部作用域,这个很显然。要强调的是另一点:基类作用域大于派生类作用域。可能有人会有疑问,这两个作用域看不见摸不到,怎么知道大小?但是其实仔细想想,这很符合现实世界的面向对象模型:鱼的作用域显然要比金鱼大,交通工具的作用域肯定要比飞机大。如果你实在理解不了,那你还是就这么记住吧。b) 名字查找。请注意,这里的名字仅仅是指函数的名字,而不是原型!名字相同,查找即成功。这是个跟作用域密切相关的概念。名字查找符合以下的过程:1.根据对象,指针,引用的静态版本决定哪一个函数被调用。2.到相应的类中查找,如果没有找到,则到该类的直接基类中查找,按此 阅读全文
posted @ 2011-05-11 22:56
微型葡萄
阅读(438)
评论(0)
推荐(0)
摘要:
(1)基本思想我感觉可以把基数排序归类在“减治”的算法类别中,因为基数排序实际上每执行一次排序就能减少问题的规模(它是一种稳定的排序)。我们在日常生活中最常使用的十进制数的大小比较其实就是基数排序最好的实例(具体见本文第2节),我们在比较两个2位数时,会先比较其十位的大小,然后比较个位大小。例如,53和56。这是基数排序的MSD(most significant digital)的情况。当然,基数排序其实并没有用“比较”,基数排序和桶排序(bucket sort)都采用了“桶”作为每一步排序的存储单位。这些“桶”其实是排序好的。对于十进制数来说,一共只有0-9共10个桶。如果将乱序的数字(比如 阅读全文
posted @ 2011-05-11 22:55
微型葡萄
阅读(427)
评论(0)
推荐(0)
摘要:
汤森路透的笔试题是IKM的标准试题--Internet Knowledge Measurement,软件开发的主要包括三种内容:C++语法/UML设计/SQL语句。考得很细节。这个笔试题是考虑时间因素的,如果是题目答对的一样多,如果时间越短,最后的成绩会越高;不会的题可以skip,因为答错还倒扣分。我记得我skip了很多SQL的题目,但是最后还是过了,我是那场第一个答完题目的。过了一周之后,HR通... 阅读全文
posted @ 2011-05-11 22:55
微型葡萄
阅读(568)
评论(0)
推荐(0)
摘要:
一道C++多态的题目,考察多态和构造顺序的。求输出结果:#include <iostream>#include <vector>class Base{public: Base(){ cout<<"Base::Base()"<<endl; virt(); }virtual void virt() { cout<<"Base::virt()"<<endl; }void func(){ cout<<"Base::func()"<<endl; }} 阅读全文
posted @ 2011-05-11 22:55
微型葡萄
阅读(422)
评论(0)
推荐(0)
摘要:
正则表达式中我们可以使用一对括号(此处单指小括号(),中括号[]和大括号{}不包括在内)将一个正则表达式扩起来以表示它是一个整体。例如:([0-9A-Za-z]+)表示括号内的进行整体匹配。但是在C#中,这种整体匹配还有一个小小的副作用:C#的正则表达式引擎将这种括号内的正则表达式组在结果中进行了保存。下面以一个例子说明。现在我们要匹配一个时间的格式:03/15/2010。表示的是MM/DD/YY... 阅读全文
posted @ 2011-05-11 22:55
微型葡萄
阅读(6692)
评论(0)
推荐(0)
摘要:
本文是第二遍重读此书的读书笔记,因此只捡了一些自己在重读时仍感重要的知识进行了记录。当然会有些东西遗漏,对我不重要的不一定对每个人都不重要。PS:这些东西还是需要一定的C++语法基础的。再PS:页数都是按照侯捷先生的中文版所标。粗体部分乃是重中之重。================================================================================【第一章】在虚拟继承的情况下,base class不管在继承链中被派生多少次,永远只存在一个实体。P11C++中凡是处于同一个access section的数据,必定保证以其声明次序出现在内 阅读全文
posted @ 2011-05-11 22:55
微型葡萄
阅读(471)
评论(0)
推荐(0)
摘要:
今天看到一个有意思的C++语法问题。就是如果一个派生类中含有与基类虚函数重名的静态成员函数,用指针调用会如何。代码如下:#include <iostream>using namespace std;class A{public:void virtual print(){ cout<<"A::print()"<<endl; }};class B :public A {public:void virtual print(){ cout<<"B::print()"<<endl; } } ; class 阅读全文
posted @ 2011-05-11 22:55
微型葡萄
阅读(678)
评论(0)
推荐(0)
摘要:
a) 重载(overload)。重载这个名词本身比较简单,函数一共只有三个要素:函数名、形参、返回值。重载的要素是很明确的:函数重名,形参不同(个数或者类型不同都可以)。与返回值无关。但是一定请不要忘记重载另一个非常重要的要素:同一个作用域内才发生重载![重载与继承]关于这二者的关系有两条准则(仔细看,其实就是一条):如果派生类重定义了重载成员,则通过派生类型只能访问派生类中重定义的那些成员。如果派生类想通过自身类型使用所有的重载版本,则派生类必须要么重定义所有的重载版本,要么一个也不重定义。b) 覆盖(override)同一个作用域内满足一定条件会发生重载。那不同的作用域内呢?只满足一个条件 阅读全文
posted @ 2011-05-11 22:55
微型葡萄
阅读(485)
评论(0)
推荐(0)