﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Where there is a dream ,there is hope-随笔分类-EFFECTIVE-STL学习笔记</title><link>http://www.cppblog.com/Husiwa/category/17900.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 12 Oct 2011 21:53:35 GMT</lastBuildDate><pubDate>Wed, 12 Oct 2011 21:53:35 GMT</pubDate><ttl>60</ttl><item><title>EFFECTIVE-STL-10-12</title><link>http://www.cppblog.com/Husiwa/archive/2011/10/12/158147.html</link><dc:creator>IT菜鸟</dc:creator><author>IT菜鸟</author><pubDate>Wed, 12 Oct 2011 09:51:00 GMT</pubDate><guid>http://www.cppblog.com/Husiwa/archive/2011/10/12/158147.html</guid><wfw:comment>http://www.cppblog.com/Husiwa/comments/158147.html</wfw:comment><comments>http://www.cppblog.com/Husiwa/archive/2011/10/12/158147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Husiwa/comments/commentRss/158147.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Husiwa/services/trackbacks/158147.html</trackback:ping><description><![CDATA[<div>条款10 和 11不太懂，以后再看看<br /><br />
<p>条款10，注意分配器的协定和约束<br />如果要自定义分配器<br />*把你的分配器做成一个模板，带有模板参数T，代表你要分配的内存的对象类型<br />*提供pointer和reference的typedef，但总是让pointer是T* reference是T&amp;<br />*通常，分配器不能有非静态的数据成员<br />*记得应该传给分配器的allocate成员函数需要分配的对象个数而不是字节数，也应该记得这些函数返回T*指针，即时还没有T对象被构造<br />*一定要提供标准容器依赖的内嵌rebind模板</p>
<p>条款12，对STL容器线程安全性的期待现实一些</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">template</span><span style="color: #000000">&lt;</span><span style="color: #000000">typename&nbsp;Container</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Lock<br /><img id="Codehighlighter1_40_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_191_Open_Text.style.display='none'; Codehighlighter1_40_191_Closed_Image.style.display='inline'; Codehighlighter1_40_191_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_40_191_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_40_191_Closed_Text.style.display='none'; Codehighlighter1_40_191_Open_Image.style.display='inline'; Codehighlighter1_40_191_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_40_191_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_40_191_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">:<br /><img id="Codehighlighter1_99_122_Open_Image" onclick="this.style.display='none'; Codehighlighter1_99_122_Open_Text.style.display='none'; Codehighlighter1_99_122_Closed_Image.style.display='inline'; Codehighlighter1_99_122_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_99_122_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_99_122_Closed_Text.style.display='none'; Codehighlighter1_99_122_Open_Image.style.display='inline'; Codehighlighter1_99_122_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;Lock(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;Container&nbsp;container):&nbsp;c(&nbsp;containner&nbsp;)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_99_122_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_99_122_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;getMutexFor(&nbsp;c&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_132_159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_132_159_Open_Text.style.display='none'; Codehighlighter1_132_159_Closed_Image.style.display='inline'; Codehighlighter1_132_159_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_132_159_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_132_159_Closed_Text.style.display='none'; Codehighlighter1_132_159_Open_Image.style.display='inline'; Codehighlighter1_132_159_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">Lock()</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_132_159_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_132_159_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;releaseMutexFor(&nbsp;c&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #0000ff">private</span><span style="color: #000000">:<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;Container</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;c;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" />vector</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">int</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;v;<br /><img id="Codehighlighter1_210_347_Open_Image" onclick="this.style.display='none'; Codehighlighter1_210_347_Open_Text.style.display='none'; Codehighlighter1_210_347_Closed_Image.style.display='inline'; Codehighlighter1_210_347_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_210_347_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_210_347_Closed_Text.style.display='none'; Codehighlighter1_210_347_Open_Image.style.display='inline'; Codehighlighter1_210_347_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_210_347_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_210_347_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;Lock</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;vect</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">lock</span><span style="color: #000000">(&nbsp;v&nbsp;);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;vector</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">int</span><span style="color: #000000">&gt;</span><span style="color: #000000">::iterator&nbsp;first5(&nbsp;find(v.begin()&nbsp;v.end(),&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000">));<br /><img id="Codehighlighter1_327_345_Open_Image" onclick="this.style.display='none'; Codehighlighter1_327_345_Open_Text.style.display='none'; Codehighlighter1_327_345_Closed_Image.style.display='inline'; Codehighlighter1_327_345_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_327_345_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_327_345_Closed_Text.style.display='none'; Codehighlighter1_327_345_Open_Image.style.display='inline'; Codehighlighter1_327_345_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(&nbsp;first5&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;v.end())</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_327_345_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_327_345_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">first5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br />&nbsp;</p></div><img src ="http://www.cppblog.com/Husiwa/aggbug/158147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Husiwa/" target="_blank">IT菜鸟</a> 2011-10-12 17:51 <a href="http://www.cppblog.com/Husiwa/archive/2011/10/12/158147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EFFECTIVE-STL9</title><link>http://www.cppblog.com/Husiwa/archive/2011/10/11/158063.html</link><dc:creator>IT菜鸟</dc:creator><author>IT菜鸟</author><pubDate>Tue, 11 Oct 2011 08:24:00 GMT</pubDate><guid>http://www.cppblog.com/Husiwa/archive/2011/10/11/158063.html</guid><wfw:comment>http://www.cppblog.com/Husiwa/comments/158063.html</wfw:comment><comments>http://www.cppblog.com/Husiwa/archive/2011/10/11/158063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Husiwa/comments/commentRss/158063.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Husiwa/services/trackbacks/158063.html</trackback:ping><description><![CDATA[条款九，在删除选项中仔细选择<br />*在一个标准STL容器中去掉值为1963的对象，若是一个连续内存容器，最好的方法是erase-remove<br />c.erase ( remove( c.begin(), c.end(), 1963 ), c.end（） ）；//当C时vector,string ,deque时，这是一处特定值得元素的最佳方法<br />*当C是标准关联容器的时候(map, set)使用任何叫做remove的东西都是完全错误的<br />而应该直接采用c.erase(1963)对数的高效时间<br />*但如果操作是从C中除去每个有特定值的物体<br />bool bandValue(int x)<br />对于序列容器（vector, string,deque,list)我们要做的只是把每个remove替换为remove_if然后就OK了<br />c.erase( remove_if(c.begin(), c.end(), badValue), c.end())//vector,string,deque<br />c.remove_if( badValue ) //list<br />对于标准关联容器，<br />AssocContainner&lt;int&gt; c;<br />for(AssoContainer&lt;int&gt;::iterator i = c.begin();<br />i!= c.end(); )<br />{<br />&nbsp;if(badValue(*i)) c.erase(i++);<br />&nbsp;else ++i;<br />}<br /><img src ="http://www.cppblog.com/Husiwa/aggbug/158063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Husiwa/" target="_blank">IT菜鸟</a> 2011-10-11 16:24 <a href="http://www.cppblog.com/Husiwa/archive/2011/10/11/158063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EFFECTIVE-STL5-7</title><link>http://www.cppblog.com/Husiwa/archive/2011/10/11/158057.html</link><dc:creator>IT菜鸟</dc:creator><author>IT菜鸟</author><pubDate>Tue, 11 Oct 2011 07:03:00 GMT</pubDate><guid>http://www.cppblog.com/Husiwa/archive/2011/10/11/158057.html</guid><wfw:comment>http://www.cppblog.com/Husiwa/comments/158057.html</wfw:comment><comments>http://www.cppblog.com/Husiwa/archive/2011/10/11/158057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Husiwa/comments/commentRss/158057.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Husiwa/services/trackbacks/158057.html</trackback:ping><description><![CDATA[<p>条款五，尽量使用区间成员函数代替他们的单元素兄弟<br />*对于所有标准序列容器(vector， string, deque, 和list)都有效，无论何时你必须完全替代一个容器的内容，你就应该想到赋值<br />*insert，每次都必须移动为新元素腾出空间<br />*序列容器erase时返回迭代器，而关联容器返回空</p>
<p>条款六，警惕C++最令人恼怒的解析<br />int g( double pf() ) pf其实是一个指针<br />int g( double() );同上，函数名省略<br />int g( double x) == int g( double (x) )</p>
<p>条款七， 当时用new得指针的容器时，记得在销毁容器前delete那些指针<br />*这样的代码造成内存泄露</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doSomething()<br /><img id="Codehighlighter1_19_151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_151_Open_Text.style.display='none'; Codehighlighter1_19_151_Closed_Image.style.display='inline'; Codehighlighter1_19_151_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_19_151_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_19_151_Closed_Text.style.display='none'; Codehighlighter1_19_151_Open_Image.style.display='inline'; Codehighlighter1_19_151_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_19_151_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_19_151_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">Widget</span><span style="color: #000000">*&gt;</span><span style="color: #000000">&nbsp;vwp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;SOME_MAGIC_NUMBER;&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">i)<br /><img id="Codehighlighter1_88_120_Open_Image" onclick="this.style.display='none'; Codehighlighter1_88_120_Open_Text.style.display='none'; Codehighlighter1_88_120_Closed_Image.style.display='inline'; Codehighlighter1_88_120_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_88_120_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_88_120_Closed_Text.style.display='none'; Codehighlighter1_88_120_Open_Image.style.display='inline'; Codehighlighter1_88_120_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_88_120_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_88_120_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;vwp.push_back(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Widget);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">使用完毕的时候，vwp内的Widget对象没有释放</span><span style="color: #008000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br /><br />最简单的实现方法是</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doSomething()<br /><img id="Codehighlighter1_19_107_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_107_Open_Text.style.display='none'; Codehighlighter1_19_107_Closed_Image.style.display='inline'; Codehighlighter1_19_107_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_19_107_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_19_107_Closed_Text.style.display='none'; Codehighlighter1_19_107_Open_Image.style.display='inline'; Codehighlighter1_19_107_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_19_107_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_19_107_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">Widget</span><span style="color: #000000">*&gt;</span><span style="color: #000000">::iterator&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;vwp.begin();&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;vwp.end();&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">i)<br /><img id="Codehighlighter1_89_105_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_105_Open_Text.style.display='none'; Codehighlighter1_89_105_Closed_Image.style.display='inline'; Codehighlighter1_89_105_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_89_105_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_89_105_Closed_Text.style.display='none'; Codehighlighter1_89_105_Open_Image.style.display='inline'; Codehighlighter1_89_105_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_89_105_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_89_105_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;delete&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">i;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>
<p><br /><br />这样的问题是for循环代码多余for_each，但没有使用for_each简单明了<br />另一个问题是这段代码不是异常安全的</p>
<p>简洁不考虑异常的方法</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_19_100_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_100_Open_Text.style.display='none'; Codehighlighter1_19_100_Closed_Image.style.display='inline'; Codehighlighter1_19_100_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_19_100_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_19_100_Closed_Text.style.display='none'; Codehighlighter1_19_100_Open_Image.style.display='inline'; Codehighlighter1_19_100_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">struct</span><span style="color: #000000">&nbsp;DeleteObject</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_19_100_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_19_100_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;template</span><span style="color: #000000">&lt;</span><span style="color: #000000">typename&nbsp;T</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">operator</span><span style="color: #000000">()(</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;T</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;ptr)&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000"><br /><img id="Codehighlighter1_81_98_Open_Image" onclick="this.style.display='none'; Codehighlighter1_81_98_Open_Text.style.display='none'; Codehighlighter1_81_98_Closed_Image.style.display='inline'; Codehighlighter1_81_98_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_81_98_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_81_98_Closed_Text.style.display='none'; Codehighlighter1_81_98_Open_Image.style.display='inline'; Codehighlighter1_81_98_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_81_98_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_81_98_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;delete&nbsp;prt;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doSomething()<br /><img id="Codehighlighter1_122_207_Open_Image" onclick="this.style.display='none'; Codehighlighter1_122_207_Open_Text.style.display='none'; Codehighlighter1_122_207_Closed_Image.style.display='inline'; Codehighlighter1_122_207_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_122_207_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_122_207_Closed_Text.style.display='none'; Codehighlighter1_122_207_Open_Image.style.display='inline'; Codehighlighter1_122_207_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_122_207_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_122_207_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;deque</span><span style="color: #000000">&lt;</span><span style="color: #000000">SpecialString</span><span style="color: #000000">*&gt;</span><span style="color: #000000">&nbsp;dssp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;for_each(&nbsp;dssp.begin(),&nbsp;dssp.end(),&nbsp;DeleteObject());<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doSomething()<br /><img id="Codehighlighter1_229_371_Open_Image" onclick="this.style.display='none'; Codehighlighter1_229_371_Open_Text.style.display='none'; Codehighlighter1_229_371_Closed_Image.style.display='inline'; Codehighlighter1_229_371_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_229_371_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_229_371_Closed_Text.style.display='none'; Codehighlighter1_229_371_Open_Image.style.display='inline'; Codehighlighter1_229_371_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_229_371_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_229_371_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;typedef&nbsp;boost::shar_ptr</span><span style="color: #000000">&lt;</span><span style="color: #000000">Widget</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;SPW;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;vector</span><span style="color: #000000">&lt;</span><span style="color: #000000">SPW</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;vwp;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">SOME_MAGIC_NUMBER;&nbsp;</span><span style="color: #000000">++</span><span style="color: #000000">i)<br /><img id="Codehighlighter1_331_369_Open_Image" onclick="this.style.display='none'; Codehighlighter1_331_369_Open_Text.style.display='none'; Codehighlighter1_331_369_Closed_Image.style.display='inline'; Codehighlighter1_331_369_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_331_369_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_331_369_Closed_Text.style.display='none'; Codehighlighter1_331_369_Open_Image.style.display='inline'; Codehighlighter1_331_369_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_331_369_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_331_369_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;vwp.push_back(&nbsp;SPW(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Widget));<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br /><br />&nbsp;</p><img src ="http://www.cppblog.com/Husiwa/aggbug/158057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Husiwa/" target="_blank">IT菜鸟</a> 2011-10-11 15:03 <a href="http://www.cppblog.com/Husiwa/archive/2011/10/11/158057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>