<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>不敢流泪 &#187; C＋＋</title>
	<atom:link href="http://www.boluor.com/tag/c%ef%bc%8b%ef%bc%8b/feed" rel="self" type="application/rss+xml" />
	<link>http://www.boluor.com</link>
	<description></description>
	<lastBuildDate>Fri, 18 Jun 2010 05:38:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>小说const</title>
		<link>http://www.boluor.com/say-about-const.html</link>
		<comments>http://www.boluor.com/say-about-const.html#comments</comments>
		<pubDate>Fri, 04 Dec 2009 16:05:17 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C＋＋]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=469</guid>
		<description><![CDATA[<p>	const用法比较复杂，小结下我常见的用法。</p>
<ol>
<li>限定类型修饰符。
<ol>
<li>int  const a = 1;	//int型常量。需要在定义时就初始化。</li>
<p> 　　
<li>int const arr[] = {1 ,2 , 3};	//数组中每一个元素都是常量。但是注意，不能把1中的a和arr[1]当作一样的。比如说可以紧接着这样定义：<br />
int testArr[a];	//正确<br />
int testArr[arr[1]];	//错误<br />
原因：const用于集合时，编译器不会把这个集合放到其符号表中，那么需要为其分配内存。但是虽然为其分配内存，其值却不能在编译阶段使用。</li>
</p><p> 　　
<li>int const *p;	//p是一个指向int型常量的指针。这里的p指针没必要在定义的时候就初始化。不过</li></p></ol></li></ol><p>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>	const用法比较复杂，小结下我常见的用法。</p>
<ol>
<li>限定类型修饰符。
<ol>
<li>int  const a = 1;	//int型常量。需要在定义时就初始化。</li>
<p> 　　
<li>int const arr[] = {1 ,2 , 3};	//数组中每一个元素都是常量。但是注意，不能把1中的a和arr[1]当作一样的。比如说可以紧接着这样定义：<br />
int testArr[a];	//正确<br />
int testArr[arr[1]];	//错误<br />
原因：const用于集合时，编译器不会把这个集合放到其符号表中，那么需要为其分配内存。但是虽然为其分配内存，其值却不能在编译阶段使用。</li>
<p> 　　
<li>int const *p;	//p是一个指向int型常量的指针。这里的p指针没必要在定义的时候就初始化。不过*p是只读的，就是说不能通过*p来修改其所指向地址的值，但是可以通过其他指针修改。</li>
<p> 　　
<li>int  * const p;	// p是一个指针常量，指向int型变量。p本身不能改变。不过*p是可读可写的。</li>
<p> 　　
<li>自然，综合上面两个，就有了int const * const p; //意义不言自明了吧？</li>
<p> 　　
<li>class A; const A a; 简单的用法，跟上面是一样的。不过牵扯到类，就变得复杂了，有些我也搞不明白。</li>
</ol>
</li>
<li>转换规则<br />
　　描述起来费劲，不如看例子。<br />
　　const int *pa;<br />
　　int * pb;<br />
　　pb = pa;	//错误，不能直接将指向常量的指针转换为指向非常量的指针。<br />
　　pa = pb;	//正确。<br />
　　pb = (int *) pa;	//可以强制转换。不过转换后就失去了原有的保护机制。这时就可以通过pb修改pa所指向地址的值。
</li>
<p>　</p>
<li>作为函数参数
<ol>
 　　
<li>const修饰函数参数，就是希望函数不修改这个参数的值。对于值传递来说，没必要用const，因为函数即使修改了也是修改的副本，对实参没影响。但是这种拷贝毕竟费时耗内存，所以有了引用。此时又不希望引用被修改，所以可以加上const限定。比如：<br />
void fun( int const &#038; );</li>
<p> 　　
<li>但是记住，const仅仅只能希望程序不修改参数的值或者参数指向的地址的值，但不能杜绝它那么作。加入const可以让编译器在编译阶段就能检查出不希望的修改行为。但如果你强制修改或通过其他方式，照样是可以达到目的的。比如：<br />
void fun( int const *a){<br />
int *tmp = (int *)a;<br />
*tmp = *tmp +1;<br />
}
</li>
</ol>
</li>
<p>　</p>
<li>限定函数<br />
　　主要是限定类的成员函数。如果不希望一个成员函数修改任何一个类的成员数据，比如说这个函数只是打印信息。就可以像下面这样限定：<br />
class A{<br />
	void fun(&#8230;) const;	//不要把const写到最前面了，那意义可就变了。<br />
}<br />
　　但是，如果某个成员有mutable修饰，那上面的const就不对它保护了，程序可以随便修改。
</li>
<p>　</p>
<li>
修饰函数返回值<br />
　　如果像这样：const int fun( );使用，我觉得没有什么意义。因为，系统会将返回值复制到函数外部的临时存储单元中。如果是：const char * fun( ); 那么只能用const char *型变量来保存。const char * rtv = fun( ); </li>
<p>　</p>
<li>
多文件中共享const常量<br />
　　在C中定义时，如果是： int Max = 100 ; 默认的linkage就是extern，此时在其他文件中通过声明extern int Max ; 就可以使用Max 了。有时候需要在多个源文件中共享某个常量，此时注意了。在C++中，const定义默认具有 internal linkage，如果你定义int const Max = 100 ; 希望其他文件通过声明： extern int const Max ;来使用Max，那就会编译错误，提示找不到Max。此时需要显示的声明为Max为extern，即extern int const Max = 100 ;
</li>
<p>　</p>
<li>const其他<br />
　　const比#define要好得多的多。#define是在预处理时展开，定义的符号在编译完成之后，就不存在了，原来的地方全部成了立即数。const定义的常量在运行期间也是存在的，在编译阶段有可能加入符号表，方便查询，所以编译速度也不是大问题。由上也可推出，const会在某些场合比define少些内存分配。比如说：const str[] = “hello”; 如果程序中用到了多次str，那么str只需要一次内存分配，之后使用只要给出地址就行。而define：#define str “hello”; 将多次出现的地方全部替换成了立即数，那么每次使用时都需要为之分配内存，也就是说内存中会存在str的多个拷贝。
</li>
</ol>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>　　上面的代码可能有让你不舒服的地方，尤其 int const * p ; 而不是写作 const int *p ; 在说明我为什么这么写（下一篇文章）之前，问个问题，如果你能很清晰地回答正确，就没必要继续看了。<br />
　　参考：Dan Saks写的《const T vs T const》。<br />
　　［问题］<br />
		typedef void *VP;<br />
		const VP vectorTable[] = { … <data>&#8230;};<br />
		跟下面的是不是等价的？<br />
		const void *vectorTable[] = { &#8230;<data>&#8230; };</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/say-about-const.html/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>2009笔试+面试总结(一)</title>
		<link>http://www.boluor.com/2009-the-first-summary-of-writtens-and-interviews.html</link>
		<comments>http://www.boluor.com/2009-the-first-summary-of-writtens-and-interviews.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 15:31:32 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C＋＋]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=418</guid>
		<description><![CDATA[<p>　　十月份到现在参加了4个公司的笔试和面试，后天打算把三方协议签了，找工作就暂时尘埃落定了。开始专心复习之前，把笔试和面试中遇到的一些问题拿出来总结下。所列题目大致按照出题思想，非原题目。<br />
　　我面试的这4家IT公司，对于三点都非常重视。一个是基础知识，一个是运用知识，思考的能力，一个组织表达能力。按这三种分类记录下笔试和面试题目。</p>
<p><strong>［基础知识］</strong><br />
　　考察基础知识，在笔试题目最常见，占比例也最大。</p>
<ol>
<li>有n个节点的二叉树，其中有m个节点有两个孩子，问这棵树有多少颗叶子节点。
<blockquote><p>这题目其实是数据结构上的原题，不要被n迷惑了。</p></blockquote>
</li>
<p><span id="more-418"></span>
<li>问这段代码输出什么？考察C++基础。</li></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #0000ff;">class</span> A<span style="color: #008000;">&#123;</span> 
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span> 
<span style="color: #0000ff;">int</span> x<span style="color: #008000;">&#4</span></pre></div></div></ol><p>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>　　十月份到现在参加了4个公司的笔试和面试，后天打算把三方协议签了，找工作就暂时尘埃落定了。开始专心复习之前，把笔试和面试中遇到的一些问题拿出来总结下。所列题目大致按照出题思想，非原题目。<br />
　　我面试的这4家IT公司，对于三点都非常重视。一个是基础知识，一个是运用知识，思考的能力，一个组织表达能力。按这三种分类记录下笔试和面试题目。</p>
<p><strong>［基础知识］</strong><br />
　　考察基础知识，在笔试题目最常见，占比例也最大。</p>
<ol>
<li>有n个节点的二叉树，其中有m个节点有两个孩子，问这棵树有多少颗叶子节点。</p>
<blockquote><p>这题目其实是数据结构上的原题，不要被n迷惑了。</p></blockquote>
</li>
<p><span id="more-418"></span>
<li>问这段代码输出什么？考察C++基础。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #0000ff;">class</span> A<span style="color: #008000;">&#123;</span> 
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span> 
<span style="color: #0000ff;">int</span> x<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span> 
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span> 
<span style="color: #0000ff;">class</span> B <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> A<span style="color: #008000;">&#123;</span> 
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span> 
<span style="color: #0000ff;">int</span> x<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span> 
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span> 
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> 
A <span style="color: #000040;">*</span>a <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> A<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
A <span style="color: #000040;">*</span>b <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> B<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> a<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> b<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span> 
<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> 
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>　　<br />
<blockquote>类A中的函数x并非虚函数，所以不会发生动态绑定。</p></blockquote>
</li>
<li>
　　下列哪个表达式是错误的?<br />
　　int a = 10;<br />
　　1. (a++) += a;<br />
　　2. (++a) += (a++);<br />
　　<br />
<blockquote>a++其实是分三个步骤的：{tmp=a;++a;return tmp;}所以a++不能作为左值。</p></blockquote>
</li>
<li>
　　问下面的程序需要几次才能跳出循环?</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:Courier new,verdana;">　　<span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> a <span style="color: #339933;">=</span><span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>
　　<span style="color: #993333;">int</span> b <span style="color: #339933;">=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
　　<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> a<span style="color: #339933;">+</span>b <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   　　　b<span style="color: #339933;">--;</span>
　　<span style="color: #009900;">&#125;</span></pre></div></div>

<p>　　<br />
<blockquote>C++中有符号和无符号类型之间的转换，要遵循一个原则：所定义的转换规则需要保护操作数的精度。比如long和unsigned int类型，只要机器上的long型足够表示unsigned int型的所有值，就将unsigned int转换为long型，否则，将两个操作数都转换为unsigned long。而对于包含signed 和 unsigned int型的表达式，其转换则是将signed型数值转换为unsigned型。如果此时将int转换为unsigned int，而int型数值恰好为负数，那这带来了副作用。此题就是一个例子。</p></blockquote>
</li>
<li>
　　union{<br />
　　int i;<br />
　　char x[2];<br />
　　}a;</p>
<p>　　a.x[0] = 8;<br />
　　a.x[1] = 1;<br />
　　问 a.i为多少?<br />
　　<br />
<blockquote>首先要了解的是，数据在内存中的存储方式。比如一个int型数，4个字节，表示为ABCD，在内存其实是DCBA保存的。那么看这题，内存中保存的是：00001000 00000001 00000000 00000000.根据上面的规则，那么用int来读取这段数据，即为00000000 00000000 00000001 00001000，即264.</p></blockquote>
</li>
<li>
　　map,set,hashmap和multimap,有个与其他三个数据结构不同的是哪一个?<br />
　　<br />
<blockquote>hashmap，采用和其他三种都不同的方式。</p></blockquote>
</li>
<li>
　　如果一个数列中的元素距离他们各自最终的位置都很近，那么哪一种算法最省时间？（直接插入，堆排序，快速排序，选择排序）<br />
　　<br />
<blockquote>我感觉是直接插入排序，当然还需要测试。</p></blockquote>
</li>
<li>
　　const char *和char * const 的区别。<br />
　　　<br />
<blockquote>const char *p;结合的方式是自右向左。所以p首先是个指针，然后个char型指针，然后他指向的是个const,此时，p本身的值可以改变的，但是不能通过p来修改p所指向区域A的值，但A可以通过其他指针修改。同理，char * const p，p首先是个const对象，之后才是指向char型的指针，此时p本身是不能修改的。</p></blockquote>
</li>
<li>
　　问下面的结果？<br />
　　char a = 50;<br />
　　int i = sizeof( a = (a+205));<br />
　　问 i 和 a各为多少?<br />
　　<br />
<blockquote>i为1大家都可以看出来，但a为多少相信就不是那么容易答对了。答-1的算好的，说255的就可以回去看计组了。sizeof(A)是个大难点，尤其是A如果是struct类型的时候。此题中，sizeof(A)的值其实是在编译阶段就已经确定了，所以根本没有运行a = a+205 这一步。在编译完成后，这句就相当于int i = 1;</p></blockquote>
</li>
<li>
　　计算机网络单播，组播，广播的区别。路由器和交换机的作用和原理。ARP协议的内容，以及其他相关的PPPOE协议的知识。
</li>
<li>
　　修改错误的代码：快排和堆排序。这完全的基本功了，为了面试，多练习在纸上写程序吧。
	</li>
</ol>
<p>　　类似的题目还有很多。这些题目如果不能拿分的话，给面试官的印象会很不好。这几次面试的时候，面试官手里一般都是我的笔试试卷 + 面试评分单。面试官都会拿我的基础题目说，为什么这道题目都不会？所以把握基础题目至关重要的。</p>
<p>　　计算机本身是门实践性更强的学科，所以如果平时不怎么编程，是很难发现自己的问题和未知的领域的。tencent的笔试题目考得很细很深，平时不上机code的同学可能很难会想到所考的知识点； 而遇到问题时不刨根问底或者得过且过，则会造成更大的遗憾。const char *和char * const的区别，内存的分配方式和管理方式，内存泄漏等等，平时感觉到有一丁点疑惑时，问题的背后一般藏有更多你不了解的；还有一点也很重要，像PPPOE并不是在书上，但是大家听说的就比较多了。应该及时的去了解这些前沿领域（虽然PPPOE不算前沿），保持对本专业发展方向的敏感，扩大自己的视野。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/2009-the-first-summary-of-writtens-and-interviews.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>woj1414 &#8211; URL 解题报告</title>
		<link>http://www.boluor.com/woj1414-url-solution-report.html</link>
		<comments>http://www.boluor.com/woj1414-url-solution-report.html#comments</comments>
		<pubDate>Sun, 30 Aug 2009 15:33:59 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[C＋＋]]></category>
		<category><![CDATA[STL]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=351</guid>
		<description><![CDATA[<p>　　原题目见：<a href="http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1414" class="broken_link">Problem 1414 &#8211; URL </a>。<br />
　　题目的背景是，我们在浏览器中输入URL时，浏览器会提示我们之前搜索过的，URL以当前字符为前缀的的网页，并且按照之前访问次数来递减显示。<br />
　　思路，每次Visit时将访问的页面作为KEY来保存，并且次数增1。每次Display时，搜索所有现存的网页，找到以当前字符串为前缀的字符串，并按次数逆序输出。<br />
　　虽然解题报告不提倡直接贴代码，不过我的代码没多少行，题目又比较简单，就给我AC的代码吧。这题的数据比较弱，我看前200多名都是0MS。代码是逼着自己用STL中的容器map写的，如果发现有什么改进的地方请告诉我。<span id="more-351"></span></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #339900;">#include &#60;i</span></pre></div></div><p>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>　　原题目见：<a href="http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1414" class="broken_link">Problem 1414 &#8211; URL </a>。<br />
　　题目的背景是，我们在浏览器中输入URL时，浏览器会提示我们之前搜索过的，URL以当前字符为前缀的的网页，并且按照之前访问次数来递减显示。<br />
　　思路，每次Visit时将访问的页面作为KEY来保存，并且次数增1。每次Display时，搜索所有现存的网页，找到以当前字符串为前缀的字符串，并按次数逆序输出。<br />
　　虽然解题报告不提倡直接贴代码，不过我的代码没多少行，题目又比较简单，就给我AC的代码吧。这题的数据比较弱，我看前200多名都是0MS。代码是逼着自己用STL中的容器map写的，如果发现有什么改进的地方请告诉我。<span id="more-351"></span></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;map&gt;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    string prompt,str<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> n,m<span style="color: #008080;">;</span>
    string visit<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Visit&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//string display(&quot;Display&quot;);</span>
    <span style="color: #0000ff;">typedef</span> map<span style="color: #000080;">&lt;</span>string , <span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> Urls<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">typedef</span> Urls<span style="color: #008080;">::</span><span style="color: #007788;">const_iterator</span> UrlsIter<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">typedef</span> multimap<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span> ,string , greater<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span> Urlrank<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">typedef</span> Urlrank<span style="color: #008080;">::</span><span style="color: #007788;">const_iterator</span> RankIter<span style="color: #008080;">;</span>
&nbsp;
    Urls url<span style="color: #008080;">;</span>
    Urlrank urlrank<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000dd;">cin</span><span style="color: #000080;">&gt;&gt;</span>n<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span> n<span style="color: #000040;">--</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cin</span><span style="color: #000080;">&gt;&gt;</span>m<span style="color: #008080;">;</span>
&nbsp;
        url.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        urlrank.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
        <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span> m<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000dd;">cin</span> <span style="color: #000080;">&gt;&gt;</span> prompt <span style="color: #000080;">&gt;&gt;</span> str<span style="color: #008080;">;</span>
&nbsp;
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> visit.<span style="color: #007788;">compare</span><span style="color: #008000;">&#40;</span>prompt<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                url<span style="color: #008000;">&#91;</span>str<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>UrlsIter iter <span style="color: #000080;">=</span> url.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> iter <span style="color: #000040;">!</span><span style="color: #000080;">=</span> url.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> iter<span style="color: #000040;">++</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                    string tmp<span style="color: #008000;">&#40;</span>iter<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>first<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> tmp.<span style="color: #007788;">find</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                        urlrank.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span> make_pair<span style="color: #008000;">&#40;</span> iter<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>second,iter<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>first <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                    <span style="color: #008000;">&#125;</span>
                <span style="color: #008000;">&#125;</span>
&nbsp;
                <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> RankIter iter <span style="color: #000080;">=</span> urlrank.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> iter <span style="color: #000040;">!</span><span style="color: #000080;">=</span> urlrank.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> iter<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> iter<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>second <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
&nbsp;
                <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
                urlrank.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/woj1414-url-solution-report.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>STL笔记一</title>
		<link>http://www.boluor.com/stl-notes.html</link>
		<comments>http://www.boluor.com/stl-notes.html#comments</comments>
		<pubDate>Wed, 26 Aug 2009 15:22:43 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[C＋＋]]></category>
		<category><![CDATA[STL]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=317</guid>
		<description><![CDATA[　　【题目1】三句话实现：整数的输入，排序，输出：(by Sandy)
　　【题目2】三句话实现：单词的输入，剔除其中重复的单词，并按字母顺序输出。
　　【woj1170】<a href="http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1170" target="_blank">Problem 1170 - Sorting </a>　　重写了遍。]]></description>
			<content:encoded><![CDATA[<p>　　	【题目1】三句话实现：整数的输入，排序，输出：(by Sandy)</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #339900;">#include &lt;iostream&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;algorithm&gt;</span>
<span style="color: #339900;">#include &lt;iterator&gt;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> v1<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>,<span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    sort<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    copy<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ostream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cout</span>,<span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>　　【题目2】三句话实现：单词的输入，剔除其中重复的单词，并按字母顺序输出。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;">	vector<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span> v1<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>,<span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	sort<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	unique_copy<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ostream_iterator<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cout</span>,<span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>　　<br />
　　【woj1170】<a href="http://acm.whu.edu.cn/oak/problem/problem.jsp?problem_id=1170" target="_blank" class="broken_link">Problem 1170 &#8211; Sorting </a>　　重写了遍。</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:Courier new,verdana;">    vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>  v1<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cin</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>,<span style="color: #008000;">&#40;</span>istream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    v1.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    sort<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    unique_copy<span style="color: #008000;">&#40;</span>v1.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v1.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ostream_iterator<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cout</span>,<span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>　　<strike>这题目用vector的效率不高，用list快些。</strike></p>
<p>　　【总结】<br />
　　明白Sandy的意思是让我练习下STL，我说了很久要学要学，但是好久之后依然还没动，被这个被那个事情给耽搁着。前天晚上和Sandy的聊天，让我明白了，这些知识并不是要等某一天某一大段时间再去学习，而是点滴积累的。</p>
<p>　　以上的两道题目牵涉到的有：(这几天总结下)<br />
　　
<ul>
<li>输入流迭代器</li>
<p>　　
<li>sort</li>
<p>　　
<li>vector，list，deque</li>
<p>　　
<li>unique_copy 和 copy</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/stl-notes.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>09金山实习生笔试总结</title>
		<link>http://www.boluor.com/2009-summary-of-kingsoft-intern-written-exam.html</link>
		<comments>http://www.boluor.com/2009-summary-of-kingsoft-intern-written-exam.html#comments</comments>
		<pubDate>Thu, 25 Jun 2009 11:46:50 +0000</pubDate>
		<dc:creator>boluor</dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[C＋＋]]></category>

		<guid isPermaLink="false">http://www.boluor.com/?p=148</guid>
		<description><![CDATA[<p>        首先说一点，感觉金山对这次实习生很不重视，连个工作人员都没派来，监考是学院的人，很囧。也没看到保密协定，所以就公开这篇日记了。<br />
	<strong>第一题</strong>是求两个整数区间的交集，即[a,b]和[c,d]的交集。这题目很简单，只要讨论端点的大小就好了。<br />
	<strong>第二题</strong>，给一个只包含字母和空格的字符串，不区分大小写，然后问那个字母没有出现过?这题目更简单，建立一个26个字母的标记表，初始化时全设置为FALSE，然后扫描字符串，出现过的字母设置为TRUE。扫描结束后再扫描一次标记表，还是FALSE的表明没有出现过。<br />
	<strong>第三题</strong>，斐波那契数列问题：<br />
F(0)=0;F(1)=F(2)=1;F(n)=F(n-1)+F(n-2);(n>=3)。现在&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>        首先说一点，感觉金山对这次实习生很不重视，连个工作人员都没派来，监考是学院的人，很囧。也没看到保密协定，所以就公开这篇日记了。<br />
	<strong>第一题</strong>是求两个整数区间的交集，即[a,b]和[c,d]的交集。这题目很简单，只要讨论端点的大小就好了。<br />
	<strong>第二题</strong>，给一个只包含字母和空格的字符串，不区分大小写，然后问那个字母没有出现过?这题目更简单，建立一个26个字母的标记表，初始化时全设置为FALSE，然后扫描字符串，出现过的字母设置为TRUE。扫描结束后再扫描一次标记表，还是FALSE的表明没有出现过。<br />
	<strong>第三题</strong>，斐波那契数列问题：<br />
F(0)=0;F(1)=F(2)=1;F(n)=F(n-1)+F(n-2);(n>=3)。现在定义:<br />
	int v=F(n);求在v不溢出的情况下，n的最大值。<br />
没有想到比较快的方法，就是从F(3)起开始求，判断当前值是否超过int的最大值，溢出后就结束。不过，斐波那契数列增长很快，求这个的速度不会很慢。我写的程序：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #339900;">#include &quot;iostream&quot;</span>
<span style="color: #339900;">#include &quot;cmath&quot;</span>
<span style="color: #339900;">#include &quot;cstdlib&quot;</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
&nbsp;
	<span style="color: #0000ff;">int</span> n<span style="color: #000080;">=</span><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> a<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span>,b<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span>,c<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span><span style="color: #666666;">//a保存F(n-2),b保存F(n-1),c保存F(n)</span>
&nbsp;
	<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> MaxInt<span style="color: #000080;">=</span><span style="color: #0000dd;">pow</span><span style="color: #008000;">&#40;</span><span style="color:#800080;">2.0</span>,<span style="color: #0000dd;">31</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>c<span style="color: #000080;">&lt;</span>MaxInt<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
		c<span style="color: #000080;">=</span>a<span style="color: #000040;">+</span>b<span style="color: #008080;">;</span>
		a<span style="color: #000080;">=</span>b<span style="color: #008080;">;</span>
		b<span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #000040;">++</span>n<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span>n<span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">system</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;pause&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>运行不到1秒钟,结果为48.当时我笔试的时候犯了个低级错误,int型的最大值是2^31-1而不是2^32-1(unsigned int类型)。<br />
	<strong>第四题</strong>，哥德巴赫猜想，一个偶数必然可以表示成两个素数之和。那么现在给一个N(4<=N<=1000),求N可被表示为不同的两个素数对的个数。比如20,可以表示为(3,17)和(7,13)两对.思路也比较简单,打个素数表,然后在[2,N/2]之间的素数判断,假设当前值为i,只要判断N-i是否为素数就可以了.代码不贴了.<br />
	<strong>第五题</strong>还不错.问析构函数用虚函数有什么作用?举个例子说明这点.我对虚函数了解不多,当时感觉可能造成内存泄漏,然后就糊弄着写了下.回来后Sandy给我讲了下,才渐渐明了.<br />
	首先应该知道一点,析构函数不必要是虚函数.<br />
	其次,考虑两个问题,(1)析构函数为什么要声明为虚函数?在什么地方需要? (2)为什么析构函数要层层由子类向基类析构?<br />
先看代码:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre></td><td class="code"><pre class="cpp" style="font-family:Courier new,verdana;"><span style="color: #0000ff;">class</span> sth
<span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	~sth<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;sth freed.
&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> A<span style="color: #008000;">&#123;</span>
&nbsp;
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
	A<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a1<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>a<span style="color: #008000;">&#40;</span>a1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>s1<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> sth<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">virtual</span> ~A<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;A:%d  destroyed
&quot;</span>,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> F<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; A(%d)::F called 
&quot;</span>,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #0000dd;">delete</span> s1<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">int</span> a<span style="color: #008080;">;</span>
	sth <span style="color: #000040;">*</span>s1<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> B <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> A<span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">public</span> <span style="color: #008080;">:</span>
	B<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a1<span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>A<span style="color: #008000;">&#40;</span>a1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>s2<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> sth<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">virtual</span> ~B<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;B:%d  destroyed
&quot;</span>,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	<span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> F<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; B(%d)::F called 
&quot;</span>,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #0000dd;">delete</span> s2<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
	sth <span style="color: #000040;">*</span>s2<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> test<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	A a1<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	B b1<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	A <span style="color: #000040;">*</span>a2<span style="color: #008080;">;</span>
	a2<span style="color: #000080;">=</span><span style="color: #0000dd;">new</span> B<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #666666;">//a2-&gt;F();</span>
	<span style="color: #0000dd;">delete</span> a2<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>	如果不将class A的析构函数声明为虚函数,那么当声明一个A *a2;时,系统知道a2是指向A对象的指针,但是你又a2=new B(3);那系统是不会知道a2实际指向了B的.此时如果delete a2时,系统只会调用A的析构函数.这就是释放一半留一半,内存泄漏了.<br />
	系统在有虚函数的时候,会建立一个虚函数表,这个表中就是一些函数指针.当a2=new B(3)时,此时a2就是指向了B的对象,因此会调用B的析构函数.<br />
	那么为什么要层层向上级析构呢? 因为每一层只管理当前层的数据的释放.虽然子类知道父类分配了些内存,但是却不知道怎么释放,或者说这事不用他管.只要层层回调析构,就可以达到释放所分配的内存.这个过程跟子类的构造函数的过程正好相反.构造函数是由基类向子类层层构造.</p>
<p>	<strong>总结</strong>：虽然这次笔试难度很低,不过还是学到了些东西.一个是要细心,基础的概念要扎扎实实的,以后还有类似unsigned和int之类的问题.另一个是C++不仅要看,而且要多写.之前看过很多遍虚函数,换个问题就没思路了.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.boluor.com/2009-summary-of-kingsoft-intern-written-exam.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
