<?xml version="1.0" encoding="GB2312"?>  
<rss version="2.0" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
xmlns:admin="http://webns.net/mvcb/" 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
  
<channel> 
<title><![CDATA[韩羽的博客]]></title> 
<link>http://hanyu1980.bokee.com/index.html</link> 
<description><![CDATA[设计改变中国！]]></description> 
<dc:language>zh-cn</dc:language> 
<dc:creator>tie_zhongtang@sohu.com</dc:creator> 
<dc:date>2006-02-05T17:23:40Z</dc:date> 
<admin:generatorAgent rdf:resource="http://blog.bokee.com.com" /> 

<item> 
<title><![CDATA[异常的Rethrow分析]]></title> 
<link>http://hanyu1980.bokee.com/4380127.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font size="2">网上看了一篇类似的分析，仔细看了一下写的不错，现在把代码引用一下：</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">try</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>{</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>try</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>{</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 3">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>// </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">抛出一个异常对象</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 3">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>throw MyException(&amp;quot;ex_obj1&amp;quot;);</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>}</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>// </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">异常对象按值传递</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>catch(MyException e)</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>{</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 3">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">捕获到一个</span><span lang="EN-US"><font face="Times New Roman">MyException*</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">类型的异常，名称为：</span><span lang="EN-US"><font face="Times New Roman">&amp;quot;&amp;lt;&amp;lt;e.GetName()&amp;lt;&amp;lt;endl;</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 3">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>cout&amp;lt;&amp;lt;&amp;quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">下面重新抛出异常</span><span lang="EN-US"><font face="Times New Roman">&amp;quot;&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>// </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">异常对象重新被抛出</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 3">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>throw;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>}</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>}</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>// </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">异常对象再次按值传递</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>catch(MyException e)</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>{</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>cout&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;&amp;quot;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">捕获到一个</span><span lang="EN-US"><font face="Times New Roman">MyException*</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">类型的异常，名称为：</span><span lang="EN-US"><font face="Times New Roman">&amp;quot;&amp;lt;&amp;lt;e.GetName()&amp;lt;&amp;lt;endl;</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>}</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这个地方异常作了四次构造，这四次构造分别称为</span><span lang="EN-US"><font face="Times New Roman">obj1,obj2,obj3,obj4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。逐一道来。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span lang="EN-US"><font face="Times New Roman">throw MyException(&amp;quot;ex_obj1&amp;quot;);</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">看看这段代码。好像有一句话说，捕获的所有异常，永远不是异常对象本身。为什么这么说？</span><span lang="EN-US"><font face="Times New Roman">MyException(&amp;quot;ex_obj1&amp;quot;)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">是构造了一个局部变量，但是这个局部变量被</span><span lang="EN-US"><font face="Times New Roman">throw</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">出去后会生成一个临时变量，我们所</span><span lang="EN-US"><font face="Times New Roman">catch</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">到的不是这个对象本身，而是这个临时对象。这个临时对象本身并没有什么，但却非常重要。因为</span><span lang="EN-US"><font face="Times New Roman">rethrow</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">是这个临时对象，而不是用值传递生成的新对象。所以用值传递的方式，不能将修改带到下一个</span><span lang="EN-US"><font face="Times New Roman">catch</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">块。后面两个</span><span lang="EN-US"><font face="Times New Roman">catch</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">就是</span><span lang="EN-US"><font face="Times New Roman">obj3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">obj4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">了，以后就不用想什么，对</span><span lang="EN-US"><font face="Times New Roman">obj3</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">obj4</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">所做的任何动作不会带到下一步，因为重新抛出的是</span><span lang="EN-US"><font face="Times New Roman">obj2</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">其实异常抛出很简单的，用引用传递就可以了。使用引用传递的好处就是每次</span><span lang="EN-US"><font face="Times New Roman">catch</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">都可以做点小动作。呵呵！</span></font></p>]]></description> 
<guid isPermaLink="false">4380127@http://hanyu1980.bokee.com/</guid> 
<dc:subject>韩羽日记</dc:subject> 
<dc:date>2006-02-05T17:23:40Z</dc:date> 
</item> 
<item> 
<title><![CDATA[多人读单人写的MAP原理]]></title> 
<link>http://hanyu1980.bokee.com/4244722.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">今天，工作需要，领导教了一个多人读单人写的</span><span lang="EN-US"><font face="Times New Roman">map</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的实现。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">首要的是需要一个事件，一个临界区和一个</span><span lang="EN-US"><font face="Times New Roman">map</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">对于读操作需要</span><span lang="EN-US"><font face="Times New Roman">Wait</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这个信号，如果成功了就可以读取</span><span lang="EN-US"><font face="Times New Roman">map</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font size="2">对于写操作比较复杂，可以分为如下几步：</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><font size="2"><font face="Times New Roman"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore">1.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></span></span><span lang="EN-US">Wait</span></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">事件；</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">2.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">进入加临界区锁；这里是为了保证只有一个线程访问这段。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><font face="Times New Roman"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore">3.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></span></span><span lang="EN-US">ResetEvent</span></font></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">4.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这里最好的办法是引用计数，目前在这里等了一会，等大家都出去。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">5.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">写操作。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">6.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">发信号。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">7.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">揭开临界区的锁</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; tab-stops: list 18.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">8.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">离开。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font size="2">今后我会做一个关于引用计数的实现。这并非本人所创，乃是今天学会的一个高招。</font></span></p>]]></description> 
<guid isPermaLink="false">4244722@http://hanyu1980.bokee.com/</guid> 
<dc:subject>Design Platform</dc:subject> 
<dc:date>2006-01-19T21:47:32Z</dc:date> 
</item> 
<item> 
<title><![CDATA[已锁定]]></title> 
<link>http://hanyu1980.bokee.com/4236997.html</link> 
<description><![CDATA[已锁定]]></description> 
<guid isPermaLink="false">4236997@http://hanyu1980.bokee.com/</guid> 
<dc:subject>通信业务</dc:subject> 
<dc:date>2006-01-19T10:18:37Z</dc:date> 
</item> 
<item> 
<title><![CDATA[静态成员函数不能调用普通成员变量]]></title> 
<link>http://hanyu1980.bokee.com/4229200.html</link> 
<description><![CDATA[<font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这是个人人都知道的小问题，今天却折腾了心浮气躁的我</span><span lang="EN-US"><font face="Times New Roman">20</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">分钟。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">就这么一点错误。静态成员函数是类共享的函数，而普通成员变量则是类所独有的，所以在静态成员函数中调用普通成员变量，最起码直接调用是不可以的。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这是一个小问题，但遇事要慢慢来，不要急。写这篇</span><span lang="EN-US"><font face="Times New Roman">Blog</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">最主要要提醒自己，凡事必有因，不要着急。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" /></span></font>]]></description> 
<guid isPermaLink="false">4229200@http://hanyu1980.bokee.com/</guid> 
<dc:subject>常见错误总结</dc:subject> 
<dc:date>2006-01-18T18:15:22Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Traits技法]]></title> 
<link>http://hanyu1980.bokee.com/4213565.html</link> 
<description><![CDATA[<font size="2"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-bidi-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">接触</span><span lang="EN-US"><font face="Times New Roman">traits</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的技法已近三年多了，对它的理解也是一个循序渐进的过程，所以现在总结一下，以为后来者鉴。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">从迭代器的概念来说，迭代器和容器从逻辑上是分开的，容器存储，迭代器访问。</span><span lang="EN-US"><font face="Times New Roman">OK</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，对于模板来说，它知道元素的类型；对于迭代器这真是个伤心的问题。其实它并不知道元素的类型，所以没有办法了，这个时候就开始约定。使用</span><span lang="EN-US"><font face="Times New Roman">Traits</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">来推算出类型来。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span lang="EN-US"><font face="Times New Roman">SGI</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的实现是比较典型。例如：</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US"><font face="Times New Roman" size="2">typedef typename iterator_traits&amp;lt;_Iterator&amp;gt;::value_type<span style="mso-spacerun: yes">&amp;nbsp; </span>value_type;</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US"><font face="Times New Roman" size="2">typedef typename iterator_traits&amp;lt;_Iterator&amp;gt;::reference reference;</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US"><font face="Times New Roman" size="2">typedef typename iterator_traits&amp;lt;_Iterator&amp;gt;::pointer<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp; </span>pointer;</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">下面是</span><span lang="EN-US"><font face="Times New Roman">iterator_traits</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的实现，从中可以看出从迭代器中萃取出类型。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">template&amp;lt;typename _Iterator&amp;gt;</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>struct iterator_traits</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>{</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef typename _Iterator::iterator_category iterator_category;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef typename _Iterator::value_type<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>value_type;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef typename _Iterator::difference_type<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp; </span>difference_type;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef typename _Iterator::pointer<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>pointer;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef typename _Iterator::reference<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>reference;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>};</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">在</span><span lang="EN-US"><font face="Times New Roman">vector</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中这样定义，</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">template&amp;lt;typename _Tp, typename _Alloc = std::allocator&amp;lt;_Tp&amp;gt; &amp;gt;</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>class vector : protected _Vector_base&amp;lt;_Tp, _Alloc&amp;gt;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">{</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">typedef typename _Alloc::pointer<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>pointer;</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">typedef __gnu_cxx::__normal_iterator&amp;lt;pointer, vector_type&amp;gt; iterator;</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font size="2">……</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">}</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这是</span><span lang="EN-US"><font face="Times New Roman">Allocator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中的定义：</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">template&amp;lt;typename _Tp&amp;gt;</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>class allocator: public ___glibcxx_base_allocator&amp;lt;_Tp&amp;gt;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>{</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp; </span>public:</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef size_t<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>size_type;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef ptrdiff_t<span style="mso-spacerun: yes">&amp;nbsp; </span>difference_type;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef _Tp*<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>pointer;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef const _Tp* const_pointer;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef _Tp&amp;amp;<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>reference;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef const _Tp&amp;amp; const_reference;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>typedef _Tp<span style="mso-spacerun: yes">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>value_type;</font></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font size="2">……</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="2">}</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这是问题的根源，迭代器归根结底通过这里得到元素的类型。萃取的起点在于</span><span lang="EN-US"><font face="Times New Roman">Allocator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，从这里开始，我们开始获取了元素的型别。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这篇写得很不充分，欲知详情，请参见</span><span lang="EN-US"><font face="Times New Roman">SGI</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的实现。</span></font></p></span></span></font>]]></description> 
<guid isPermaLink="false">4213565@http://hanyu1980.bokee.com/</guid> 
<dc:subject>Design Platform</dc:subject> 
<dc:date>2006-01-17T10:26:07Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Effective STL之后记]]></title> 
<link>http://hanyu1980.bokee.com/4207559.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">终于开始写这篇后记了，从第一篇读后感的去年</span><span lang="EN-US"><font face="Times New Roman">12</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">月</span><span lang="EN-US"><font face="Times New Roman">7</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">号到现在，历时近</span><span lang="EN-US"><font face="Times New Roman">40</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">天。这</span><span lang="EN-US"><font face="Times New Roman">40</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">天时间在我看来虽然有点长，但是从效果来看，总的来说还是不错的。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>40</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">天前，我对容器有一些经验，对迭代器经验也有，但是不是很足，其他环节就比较差了；现在各方面都有了提高。现在对各个库也有了一点体验，我想下部书的目标，应该更加底层一点。</span></font></p>]]></description> 
<guid isPermaLink="false">4207559@http://hanyu1980.bokee.com/</guid> 
<dc:subject>读书笔记</dc:subject> 
<dc:date>2006-01-16T16:29:31Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Effective STL之49-50]]></title> 
<link>http://hanyu1980.bokee.com/4206489.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">条款</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">49</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：学习破解有关</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">STL</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的编译器诊断信息</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>STL</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的编译错误提示信息是非常让人烦恼的事情，读懂编译器的提示非常重要。</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">STL</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中有很多</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">typedef</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，所以一个原则就是替代法，在这个上面，</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">UltraEdit</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">能够提供一些帮助。</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">其他还有一些总结在下面：</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">1.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">对于</span><span lang="EN-US"><font face="Times New Roman">vector</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">string</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，迭代器有时是指针，所以如果你用迭代器犯了错误，编译器诊断信息可能会提及涉及指针类型。例如，如果你的源代码涉及</span><span lang="EN-US"><font face="Times New Roman">vector&amp;lt;double&amp;gt;::iterator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，编译器消息有时会提及</span><span lang="EN-US"><font face="Times New Roman">double*</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">指针。</span><span lang="EN-US"><font face="Times New Roman">STLPort</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">也许例外。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">2.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">提到</span><span lang="EN-US"><font face="Times New Roman">back_insert_iterator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US"><font face="Times New Roman">front_insert_iterator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或</span><span lang="EN-US"><font face="Times New Roman">insert_iterator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的消息经常意味着你错误调用了</span><span lang="EN-US"><font face="Times New Roman">back_inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US"><font face="Times New Roman">front_inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或</span><span lang="EN-US"><font face="Times New Roman">inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，一一对应，（</span><span lang="EN-US"><font face="Times New Roman">back_inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">返回</span><span lang="EN-US"><font face="Times New Roman">back_insert_iterator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">类型的对象，</span><span lang="EN-US"><font face="Times New Roman">front_inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">返回</span><span lang="EN-US"><font face="Times New Roman">front_insert_iterator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">类型的对象，而</span><span lang="EN-US"><font face="Times New Roman">inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">返回</span><span lang="EN-US"><font face="Times New Roman">insert_iterator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">类型的对象。）如果你没有调用这些函数，你（直接或间接）调用的一些函数做了。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">3.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">类似地，如果你得到的一条消息提及</span><span lang="EN-US"><font face="Times New Roman">binder1st</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或</span><span lang="EN-US"><font face="Times New Roman">binder2nd</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，你或许错误地使用了</span><span lang="EN-US"><font face="Times New Roman">bind1st</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或</span><span lang="EN-US"><font face="Times New Roman">bind2nd</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。（</span><span lang="EN-US"><font face="Times New Roman">bind1st</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">返回</span><span lang="EN-US"><font face="Times New Roman">binder1st</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">类型的对象，而</span><span lang="EN-US"><font face="Times New Roman">bind2nd</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">返回</span><span lang="EN-US"><font face="Times New Roman">binder2nd</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">类型的对象。）</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">4.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">输出迭代器（例如</span><span lang="EN-US"><font face="Times New Roman">ostream_iterator</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US"><font face="Times New Roman">ostreambuf_iterators</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，和从</span><span lang="EN-US"><font face="Times New Roman">back_inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US"><font face="Times New Roman">front_inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">inserter</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">返回的迭代器）在赋值操作符内部做输出或插入工作，所以如果你错误使用了这些迭代器类型之一，你很可能得到一条消息，抱怨在你从未听说过的一个赋值操作符里的某个东西。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">5.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">你得到一条源于</span><span lang="EN-US"><font face="Times New Roman">STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">算法实现内部的错误信息（即，源代码引发的错误在</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;algorithm&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中），也许是你试图给那算法用的类型出错了。例如，你可能传了错误种类的迭代器。要看看这样的用法错误是怎样报告的，通过把这段代码喂给你的编译器来启发（并愉快！）自己</span><span lang="EN-US"><font face="Times New Roman">.</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">6.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">你使用常见的</span><span lang="EN-US"><font face="Times New Roman">STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">组件比如</span><span lang="EN-US"><font face="Times New Roman">vector</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US"><font face="Times New Roman">string</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或</span><span lang="EN-US"><font face="Times New Roman">for_each</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">算法，而编译器说不知道你在说什么，你也许没有</span><span lang="EN-US"><font face="Times New Roman">#include</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">一个需要的头文件。正如</span><span lang="EN-US"><a href="http://www.stlchina.org/documents/EffectiveSTL/files/item_48.html"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><span lang="EN-US">条款</span></span><font face="Times New Roman">48</font></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的解释，这问题会降临在长期以来都可以顺利编译而刚移植到新平台的代码。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font size="2">如上所说，替代法是个好方法，不过有些提示是在过于要命，只能自己忍受。</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><span lang="EN-US"><p><font face="Times New Roman" size="2">&amp;nbsp;</font></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">条款</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">50</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：让你自己熟悉有关</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">STL</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的网站</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><font size="2"><span lang="EN-US"><font face="Times New Roman">SGI STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">网站，</span><span lang="EN-US"><a href="http://www.sgi.com/tech/stl/"><font face="Times New Roman">http://www.sgi.com/tech/stl/</font></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd"><font size="2"><span lang="EN-US"><font face="Times New Roman">STLport</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">网站，</span><span lang="EN-US"><a href="http://www.stlport.org/"><font face="Times New Roman">http://www.stlport.org/</font></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt"><font size="2"><span lang="EN-US"><font face="Times New Roman">Boost</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">网站，</span><span lang="EN-US"><a href="http://www.boost.org/"><font face="Times New Roman">http://www.boost.org/</font></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US"><a href="http://boost.sourceforge.net/"><font face="Times New Roman">http://boost.sourceforge.net/</font></a></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 10.5pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font size="2">记住它们的地址，经常访问它们。</font></span></p>]]></description> 
<guid isPermaLink="false">4206489@http://hanyu1980.bokee.com/</guid> 
<dc:subject>读书笔记</dc:subject> 
<dc:date>2006-01-16T13:56:10Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Effective STL之47-48]]></title> 
<link>http://hanyu1980.bokee.com/4206150.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">条款</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">47</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：避免产生只写代码</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这里的只写代码和文件的只写属性并不完全是一回事，意思是写的代码为了让别人去读，写出天书并不是一件很光荣的事情。我是这样觉得，特别是觉得很多连写，会觉得效率会提高的看法是可笑的。代码的长度和效率不是一个概念。</span><span lang="EN-US"><font face="Times New Roman">STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">本来就难以被理解，作为开发者有义务让不熟悉</span><span lang="EN-US"><font face="Times New Roman">STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的人读懂代码。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman" size="2">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">条款</span><span lang="EN-US"><font face="Times New Roman">48</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：总是</span><span lang="EN-US"><font face="Times New Roman">#include</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">适当的头文件</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><font size="2">不需要太多内容，这就是全部：</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">几乎所有的容器都在同名的头文件里，比如，</span><span lang="EN-US"><font face="Times New Roman">vector</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">在</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;vector&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中声明，</span><span lang="EN-US"><font face="Times New Roman">list</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">在</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;list&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中声明等。例外的是</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;set&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;map&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;set&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">声明了</span><span lang="EN-US"><font face="Times New Roman">set</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">multiset</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;map&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">声明了</span><span lang="EN-US"><font face="Times New Roman">map</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">multimap</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">除了四个算法外，所有的算法都在</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;algorithm&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中声明。例外的是</span><span lang="EN-US"><font face="Times New Roman">accumulate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">（参见</span><span lang="EN-US"><a href="http://www.stlchina.org/documents/EffectiveSTL/files/item_37.html"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><span lang="EN-US">条款</span></span><font face="Times New Roman">37</font></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">）、</span><span lang="EN-US"><font face="Times New Roman">inner_product</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US"><font face="Times New Roman">adjacent_difference</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">partial_sum</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。这些算法在</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;numeric&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中声明。</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">特殊的迭代器，包括</span><span lang="EN-US"><font face="Times New Roman">istream_iterators</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">istreambuf_iterators</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">（参见</span><span lang="EN-US"><a href="http://www.stlchina.org/documents/EffectiveSTL/files/item_29.html"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""><span lang="EN-US">条款</span></span><font face="Times New Roman">29</font></a></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">），在</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;iterator&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中声明。</span><span lang="EN-US"><font face="Times New Roman"> </font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; tab-stops: list 21.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">标准仿函数（比如</span><span lang="EN-US"><font face="Times New Roman">less&amp;lt;T&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">）和仿函数适配器（比如</span><span lang="EN-US"><font face="Times New Roman">not1</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US"><font face="Times New Roman">bind2nd</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">）在</span><span lang="EN-US"><font face="Times New Roman">&amp;lt;functional&amp;gt;</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中声明。</span></font></p>]]></description> 
<guid isPermaLink="false">4206150@http://hanyu1980.bokee.com/</guid> 
<dc:subject>读书笔记</dc:subject> 
<dc:date>2006-01-16T13:14:09Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Effective STL之45-46]]></title> 
<link>http://hanyu1980.bokee.com/4205009.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">条款</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">45</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：注意</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">count</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">binary_search</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">lower_bound</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">upper_bound</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">equal_range</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的区别</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">对无序区间的查找，我们当然是</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，只有当需要统计拷贝的个数，</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">count</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">才有意义。如果对有序区间</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">binary_search</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">告诉你是否有。如果要知道位置，</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">equal_range</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">是一个好的选择。对有序需要的统计当然</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">distance</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">配合</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">equal_range</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">当然要比</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">count</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的效率高。</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; tab-stops: list 39.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="COLOR: black; mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">1.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">期望值是否存在？</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(1) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">无序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(2) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">有序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">binary_search<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(3) set</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">map</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">count<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(4) multiset</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">multimap</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; tab-stops: list 39.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="COLOR: black; mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">2.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">期望值是否存在？如果有，第一个等于这个值的对象在哪里？</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(1) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">无序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(2) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">有序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">equal_range<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(3) set</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">map</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">count<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(4) multiset</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">multimap</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">lower_bound</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; tab-stops: list 39.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="COLOR: black; mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">3.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">第一个不在期望值之前的对象在哪里？</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(1) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">无序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find_if<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(2) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">有序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">lower_bound<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(3) set</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">map</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">lower_bound<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(4) multiset</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">multimap</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">lower_bound</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; tab-stops: list 39.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="COLOR: black; mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">4.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">第一个在期望值之后的对象在哪里？</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(1) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">无序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find_if<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(2) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">有序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">upper_bound<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(3) set</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">map</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">upper_bound<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(4) multiset</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">multimap</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">upper_bound</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; tab-stops: list 39.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="COLOR: black; mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">5.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">有多少对象等于期望值？</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(1) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">无序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">count<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(2) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">有序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">equal_range,</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">然后</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">distance<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(3) set</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">map</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">count<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(4) multiset</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">multimap</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">count</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; tab-stops: list 39.0pt; mso-list: l0 level1 lfo1"><font size="2"><span lang="EN-US" style="COLOR: black; mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore"><font face="Times New Roman">6.<span style="FONT: 7pt "Times New Roman"">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span></font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">等于期望值的所有对象在哪里？</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(1) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">无序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">find</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">（迭代）</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(2) </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">有序区间：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">equal_range<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(3) set</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">map</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">equal_range<p /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">(4) multiset</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">或者</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">multimap</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">equal_range</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">当然，序列容器要用泛型算法，而关联容器用成员函数。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><p><font face="Times New Roman" size="2">&amp;nbsp;</font></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">条款</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">46</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：考虑使用函数对象代替函数作算法的参数</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">作为参数，如果比对器，自己的设计和</span><span lang="EN-US"><font face="Times New Roman">STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的设计有什么区别？</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">如果是纯函数，一般来说，算是一次函数调用，而一般</span><span lang="EN-US"><font face="Times New Roman">STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的调用</span><span lang="EN-US"><font face="Times New Roman">operator()</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">是内联函数，这样效率会高一些。所以要善用内联对象，可能效率会更好一些。这和</span><span lang="EN-US"><font face="Times New Roman">39</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">有点冲突，需要博弈。</span></font></p>]]></description> 
<guid isPermaLink="false">4205009@http://hanyu1980.bokee.com/</guid> 
<dc:subject>读书笔记</dc:subject> 
<dc:date>2006-01-16T10:34:19Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Effective STL之43-44]]></title> 
<link>http://hanyu1980.bokee.com/4177070.html</link> 
<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">条款</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">43</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：尽量用算法调用代替手写循环</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><font face="Times New Roman"><span style="mso-tab-count: 1">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </span>Meyers</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">阐述的优点：</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman">1.</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">效率：算法通常比程序员产生的循环更高效。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman">2.</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">正确性：写循环时比调用算法更容易产生错误。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US"><font face="Times New Roman">3.</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">可维护性：算法通常使代码比相应的显式循环更干净、更直观。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">手写循环，可能直接导致迭代器实效。这真是一个让人发疯的问题。可以通过一些仿函式来避免一些此类错误。所以这类问题有一个权衡。如果手写循环简单清晰，而且是原有</span><span lang="EN-US"><font face="Times New Roman">STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">没有提供的功能，否则还是选择</span><span lang="EN-US"><font face="Times New Roman">STL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的实现吧。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><font size="2"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">关于</span><span lang="EN-US"><font face="Times New Roman">accumulate</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">对副作用敏感，而</span><span lang="EN-US"><font face="Times New Roman">for_each</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">不敏感的区别在前面提到，如果有兴趣可以阅读代码。</span><span lang="EN-US"><font face="Times New Roman">For_each</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US"><font face="Times New Roman">transform</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">大不相同，这里也不赘述了。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><span lang="EN-US"><p><font face="Times New Roman" size="2">&amp;nbsp;</font></p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">条款</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">44</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">：尽量用成员函数代替同名的算法</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="2"><span lang="EN-US" style="COLOR: black"><span style="mso-tab-count: 1"><font face="Times New Roman">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">这一条我知道的很早，最早用</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">STL</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">就知道这一原则。这里不用多说什么。两点：</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">1.</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">各种容器的成员函数有关于自身的优化。泛型只是最简单的线性操作。</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">2.</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">记得</span><span lang="EN-US" style="COLOR: black"><font face="Times New Roman">list</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">吧，他的很多成员和泛型算法名字相同，其实大不相同。</span><span lang="EN-US" style="COLOR: black"><p /></span></font></p>]]></description> 
<guid isPermaLink="false">4177070@http://hanyu1980.bokee.com/</guid> 
<dc:subject>读书笔记</dc:subject> 
<dc:date>2006-01-13T09:33:26Z</dc:date> 
</item> 

</channel> 
</rss> 
