﻿<?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++博客-wounkin-文章分类-cpp</title><link>http://www.cppblog.com/wounkin/category/4436.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 22 May 2008 16:18:58 GMT</lastBuildDate><pubDate>Thu, 22 May 2008 16:18:58 GMT</pubDate><ttl>60</ttl><item><title>Websites</title><link>http://www.cppblog.com/wounkin/articles/25646.html</link><dc:creator>Wounkin</dc:creator><author>Wounkin</author><pubDate>Wed, 06 Jun 2007 05:43:00 GMT</pubDate><guid>http://www.cppblog.com/wounkin/articles/25646.html</guid><wfw:comment>http://www.cppblog.com/wounkin/comments/25646.html</wfw:comment><comments>http://www.cppblog.com/wounkin/articles/25646.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/wounkin/comments/commentRss/25646.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wounkin/services/trackbacks/25646.html</trackback:ping><description><![CDATA[<div class=postTitle>&nbsp;</div>
<div class=postcontent><font size=2><font style="BACKGROUND-COLOR: #ffffff" color=#ff0000><strong><br></strong><font color=#000000><br></font></font></font><a href="http://www.gotapi.com/"><font color=#0000ff size=2><strong><u>http://www.gotapi.com/</u></strong></font></a><br><font size=2>&nbsp;语言：英语<br>&nbsp;简介：HTML,CSS,XPATH,XSL,JAVASCRIPT等API的查询网站。<br></font><a href="http://www.w3schools.com/"><font color=#0000ff size=2><strong><u>http://www.w3schools.com/</u></strong></font></a><br><font size=2>&nbsp;语言：英语<br>&nbsp;简介：W3C制定的标准诸如XML,HTML,XSL等等的在线学习教程。<br></font><a href="http://www.xml.org.cn/"><font color=#0000ff size=2><strong><u>http://www.xml.org.cn/</u></strong></font></a><br><font size=2>&nbsp;语言：中文<br>&nbsp;简介：可以说是XML的中国官方网吧。W3C标准的翻译组织与XML系列技术交流社区.<br></font><a href="http://www.connectionstrings.com/"><font color=#0000ff size=2><strong><u>http://www.connectionstrings.com/</u></strong></font></a><br><font size=2>&nbsp;语言：英语<br>&nbsp;简介：这里几乎收集了所有的数据库连接字符(connectionstring)了。<br></font><a href="http://www.itpub.net/"><font color=#0000ff size=2><strong><u>http://www.itpub.net/</u></strong></font></a><br><font size=2>&nbsp;语言：中文<br>&nbsp;简介：我个人认为是国内最专业的综合性行业性技术类社区.<br></font><a href="http://www.netvtm.com/"><font color=#0000ff size=2><strong><u>http://www.netvtm.com/</u></strong></font></a><br><font size=2>&nbsp;语言：中文<br>&nbsp;简介：内容多翻译于w3schools.com，少有原创。不过还是应该鼓励精品翻译。<br></font><a href="http://www.regexlib.com/"><font color=#0000ff size=2><strong><u>http://www.regexlib.com</u></strong></font></a><br><font size=2>&nbsp;语言：英语<br>&nbsp;简介：正则表达式库。搜索正则表达式用。<br><a href="http://www.rexv.org/"><strong><u><font color=#0000ff>http://www.rexv.org/</font></u></strong></a><br>&nbsp;语言：英语<br>&nbsp;简介：用Ajax开发的在线正则表达式验证器.<br></font><a href="http://www.koders.com/"><font color=#0000ff size=2><strong><u>http://www.koders.com/</u></strong></font></a><br><font size=2>&nbsp;语言：英语<br>&nbsp;简介：代码搜索引擎，可以搜索几十种语言的代码。<br></font><a href="http://www.123aspx.com/Rotor/"><font color=#0000ff size=2><strong><u>http://www.123aspx.com/Rotor/</u></strong></font></a><br><font size=2>&nbsp;语言：英语<br>&nbsp;简介：.Net Frameworks的源代码。<br></font><a href="http://dotnet.aspx.cc/"><font color=#0000ff size=2><strong><u>http://dotnet.aspx.cc/</u></strong></font></a><br><font size=2>&nbsp;语言：中文<br>&nbsp;简介：孟宪会的资料站，虽资料大多比较简单，却解决了开发中的大部分问题？！<br></font><a href="http://www.dofactory.com/Patterns/Patterns.aspx"><font color=#0000ff size=2><strong><u>http://www.dofactory.com/Patterns/Patterns.aspx</u></strong></font></a><br><font size=2>&nbsp;语言：英语<br>&nbsp;简介：23种设计模式的实现参考。特点是UML+精练的示例代码+简洁的解说风格。<br></font><a href="http://www.open-open.com/"><font color=#0000ff size=2><strong><u>http://www.open-open.com/</u></strong></font></a><br><font size=2>&nbsp;语言：中文<br>&nbsp;简介：Java开源大全,如果你用.NET，照着它的名字前加N找找应该都有吧 ？！：）<br></font><a href="http://www.riacn.com/"><font color=#0000ff size=2><strong><u>http://www.riacn.com/</u></strong></font></a><br><font size=2>&nbsp;语言：中文<br>&nbsp;简介：我认为是国内少有的RIA专业技术站于交流社区.<br></font><a href="http://www.cnpaf.net/"><font color=#0000ff size=2><strong><u>http://www.cnpaf.net/</u></strong></font></a><br><font size=2>&nbsp;语言：中文<br>&nbsp;简介：中国协议分析网，很全面的协议资料网。<br></font><a href="http://www.pinvoke.net/"><font color=#0000ff size=2><strong><u>http://www.pinvoke.net/</u></strong></font></a><br><font size=2>&nbsp;语言：英语<br>&nbsp;简介：通过.net调用win32等非受控API的资料大全。<br></font><a href="http://bbs.51js.com/"><font color=#0000ff size=2><strong><u>http://bbs.51js.com/</u></strong></font></a><br><font size=2>&nbsp;语言：中文<br>&nbsp;简介：无忧脚本,专业的脚本技术社区。<br><a href="http://www.c-sharpcorner.com/"><strong><u><font color=#0000ff>http://www.c-sharpcorner.com/</font></u></strong></a><br>&nbsp;语言：英语<br>&nbsp;简介：C# Corner,学习c#的好地方.<br></font><font size=2><a href="http://blog.csdn.net/group/experts/"><strong><u><font color=#0000ff>http://blog.csdn.net/group/experts/</font></u></strong></a><br>&nbsp;语言：中文<br>&nbsp;简介：CSDN专家群,汇集CSDN专家的电子报.<br><a href="http://www.codeproject.com/"><strong><u><font color=#0000ff>http://www.codeproject.com/</font></u></strong></a><br>&nbsp;语言：英语<br>&nbsp;简介：有很多可学习的示例代码，特点是丰富，深入浅出．<br><a href="http://www.gotdotnet.com/"><strong><u><font color=#0000ff>http://www.gotdotnet.com/</font></u></strong></a><br>&nbsp;语言：英语<br>&nbsp;简介：微软开发维护的关于.net framework交流社区.<br><a href="http://www.sourceforge.net/"><strong><u><font color=#0000ff>http://www.sourceforge.net/</font></u></strong></a><br>&nbsp;语言：英语<br>&nbsp;简介：全球最大的开源软体站点<br><a href="http://www.asp.net/QuickStart/"><strong><u><font color=#0000ff>http://www.asp.net/QuickStart/</font></u></strong></a><br>&nbsp;语言：英语<br>&nbsp;简介：Microsoft .NET Framework SDK QuickStart Tutorials<br><a href="http://www.matrix.org.cn/"><strong><font color=#0000ff><u>http://www.matrix.org.cn/</u></font></strong></a><br>&nbsp;语言：中文<br>&nbsp;简介：与 Java 共舞,Java优秀的专业社区,文章质量很高.做.Net的朋友也可以从其借鉴很多知识.<br><a href="http://www.codeplex.com/"><strong><u><font color=#0000ff>http://www.codeplex.com/</font></u></strong></a><br>语言：英文<br>简介：微软的开放源代码网站<br><a href="http://www.google.com/codesearch"><strong><u><font color=#0000ff>http://www.google.com/codesearch</font></u></strong></a><br>语言：英文<br>简介：Google的源代码搜索引擎<br><br></font></div>
<img src ="http://www.cppblog.com/wounkin/aggbug/25646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wounkin/" target="_blank">Wounkin</a> 2007-06-06 13:43 <a href="http://www.cppblog.com/wounkin/articles/25646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>generate,partial_sum,for_each</title><link>http://www.cppblog.com/wounkin/articles/25247.html</link><dc:creator>Wounkin</dc:creator><author>Wounkin</author><pubDate>Fri, 01 Jun 2007 01:49:00 GMT</pubDate><guid>http://www.cppblog.com/wounkin/articles/25247.html</guid><wfw:comment>http://www.cppblog.com/wounkin/comments/25247.html</wfw:comment><comments>http://www.cppblog.com/wounkin/articles/25247.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wounkin/comments/commentRss/25247.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wounkin/services/trackbacks/25247.html</trackback:ping><description><![CDATA[<font face=#ce_temp_font#>看看下面：<br><br><span style="COLOR: rgb(51,153,102)">&nbsp; std::vector&lt;int&gt; vect(10);</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; std::partial_sum(vect.begin(), vect.end(), vect.begin(), _2 = _1 + 1);</span><br><br>如果你现在把 vect 输出，你会得到：<br><br><span style="COLOR: rgb(128,128,128)">0 1 2 3 4 5 6 7 8 9</span><br><br>乍看起来不太好理解，我来慢慢解释。<br>partial_sum 的第4个参数是一个双参数的 functor ，在这里，lambda 表达式 _2 = _1 + 1 充当了这个角色，它相当于<br><br>
<div style="TEXT-ALIGN: center"><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">f(x, y)&nbsp; {&nbsp; y&nbsp; =&nbsp; x&nbsp; +&nbsp; 1;&nbsp; } </span></span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)"></span></span></div>
<span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)"><br>而 partial_sum 呢？它把一个序列的 partial sum 送到结果序列中去，例如如果输入一个数组 v[10] ，而输出是 r[10] ，那么它的计算就是<br><br></span></span>
<div style="TEXT-ALIGN: center"><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">r[0] = v[0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">r[1] = f( r[0], r[1] )</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">r[2] = f( r[1], r[2] )</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">......</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">r[9] = f( r[8], r[9] )</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)"></span></span></div>
<span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)"><br>而当我们把 partial_sum 作用于 vect 本身，结果就成了<br><br></span></span>
<div style="TEXT-ALIGN: center"><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">vect[0] = vect[0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // vect[0] = 0</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">vect[1] = (vect[1] = vect[0] + 1)&nbsp;&nbsp; // vect[1] = 1</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">vect[2] = (vect[2] = vect[1] + 1)&nbsp;&nbsp; // vect[2] = 2</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">......</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">vect[9] = (vect[9] = vect[8] + 1)&nbsp;&nbsp; // vect[9] = 9</span> </span><br><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)"></span></span></div>
<span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)"><br>你一定发现其中的问题所在了：首先，我们必须依赖于编译器把 vect[0] 初始化为0，其次，vect[0] = vect[0] 是不可回避的。以我当前所想到的，也只能这样了。<br><br>推广一下，如果把 </span></span><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">_2 = _1 + 1 中的常数 1 换成另外的数字，我们就可以用一句话得到从 0 开始的等差数列，例如<br><br><span style="COLOR: rgb(51,153,102)">&nbsp; std::partial_sum(vect.begin(), vect.end(), vect.begin(), _2 = _1 + 3);</span><br><br>得到的是<br><br><span style="COLOR: rgb(128,128,128)">0 3 6 9 12 15 18 21 24 27</span><br><br>如果再发挥一点想象力，你就可以构造出更复杂的 lambda 表达式，从而得到更复杂的数组（也许这里叫数列更好吧），例如<br><br><span style="COLOR: rgb(51,153,102)">&nbsp; std::partial_sum(vect.begin(), vect.end(), vect.begin(), _2 = 2 * _1 + 1);</span><br><br>得到的是 2 的 n 次方 - 1 数列<br><br><span style="COLOR: rgb(128,128,128)">0 1 3 7 15 31 63 127 255 511</span><br><br>在 STL 算法中，adjacent_difference 和 partial_sum 是逆运算，因此，上面的事情也可以用 adjacent_difference 来做，只不过要把 lambda 表达式中的参数位置换一下，例如要得到 0, 3, 6... 的等差数列，只需要<br><br><span style="COLOR: rgb(51,153,102)">&nbsp; std::adjacent_difference(vect.begin(), vect.end(), vect.begin(), _1 = _2 + 3);</span><br><br>而 2 的 n 次方 - 1 数列也是同样道理<br><br><span style="COLOR: rgb(51,153,102)">&nbsp; std::adjacent_difference(vect.begin(), vect.end(), vect.begin(), _1 = 2*_2 + 1);<br><br><font color=#000000>与之类似的还有 STL 的 partition 算法，它根据传入的 predicate 对一个序列进行划分，predicate 得到 true 的将放在前面，其余的放在后面，返回的是那些&#8220;</font> <span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">放在</span> </span><span style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(0,0,0)">后面&#8221;的元素中的第一个，换言之就是分界点。下面的代码<br><br><span style="COLOR: rgb(51,153,102)">&nbsp; std::vector&lt;int&gt; vect(10);</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; std::partial_sum(vect.begin(), vect.end(), vect.begin(), _2 = 2*_1 + 1);</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; </span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; std::cout &lt;&lt; *std::partition(vect.begin(), vect.end(), _1 &gt; 100) &lt;&lt; std::endl;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; </span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; std::for_each(vect.begin(), vect.end(), std::cout &lt;&lt; _1 &lt;&lt; " ");</span><br><br>输出为<br><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">7</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">511 255 127 7 15 31 63 3 1 0</span><br><br>如果仔细观察，还可以发现上面的输出有点问题：数列中原有的顺序（0, 1, 3, 7...）不复存在，这是因为 partition 并不是一个稳定排序的算法，它不保证排序结果保有原来的顺序。如果需要稳定排序，可以使用 stable_partition 。只需要更改排序的那一句代码为<br><br><span style="COLOR: rgb(51,153,102)">&nbsp; std::cout &lt;&lt; *std::stable_partition(vect.begin(), vect.end(), _1 &gt; 100) &lt;&lt; std::endl;</span><br><br>结果是<br><br><span style="COLOR: rgb(128,128,128)">0</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">127 255 511 0 1 3 7 15 31 63</span><br><br>当然，如果你还记得大学里的算法理论，就知道它们在效率上是有点区别的，partition 的复杂度保证为 O(n) ，具体地说是保证不超过 n/2 次交换；而 stable_partition 在最好情况下为 O(n) ，最差情况则达到 O(n*log(n)) 。<br></span></span><br>容器的初始化是如此的常见，以至于 boost 提供了一个 assign 库来简化这些操作。boost.assign 大量利用了重载的逗号和括号来简化赋值操作，提供了甚至比用数组更加简洁的语法：<br><br><span style="COLOR: rgb(51,153,102)">#include &lt;iostream&gt;<br>#include &lt;algorithm&gt;<br>#include &lt;vector&gt;<br>#include &lt;string&gt;<br><br>#include &lt;boost/assign/std/vector.hpp&gt;<br>#include &lt;boost/assign/std/list.hpp&gt;<br><br>using namespace boost::assign;<br><br>int main()<br>{<br>&nbsp; std::vector&lt;int&gt; vint;<br>&nbsp; vint += 2,3,5,7,11,13,17,19,23;<br>&nbsp; <br>&nbsp; std::vector&lt;std::string&gt; vstr;<br>&nbsp; vstr += "Amy","Ralph","Simon","Maggie";<br>&nbsp; <br>&nbsp; std::list&lt;std::string&gt; lstr;<br>&nbsp; lstr += "Amy","Ralph","Simon","Maggie";<br>&nbsp;&nbsp;&nbsp; <br>&nbsp; std::for_each(vint.begin(), vint.end(), std::cout &lt;&lt; _1 &lt;&lt; " ");<br>&nbsp; std::cout &lt;&lt; std::endl;<br>&nbsp; std::for_each(vstr.begin(), vstr.end(), std::cout &lt;&lt; _1 &lt;&lt; " ");<br>&nbsp; std::cout &lt;&lt; std::endl;<br>&nbsp; std::for_each(lstr.begin(), lstr.end(), std::cout &lt;&lt; _1 &lt;&lt; " ");<br>}</span><span style="COLOR: rgb(51,153,102)"><br><br>运行这个程序，输出与前面的大致相同，但是我们注意到初始化更加简洁了，而且也不需要额外的空间来存储数组，对于各种类型，都能够以统一的方式来初始化，真是妙不可言。有趣的是 assign 的作者在文档中还特意引用了 Bjarne Stroustrup 的话作为引子：<br><br><em>There appear to be few practical uses of <code>operator,()</code></em><!-- p.  247 -->. <br><strong>Bjarne Stroustrup</strong>, The Design and Evolution of C++<br><br>这也许就是 C++ 最大的魅力之一：你无法预料它可以办到些什么。<br><br>下面关于 map 的例子也使用 boost.assign ，可以看到重载的括号给我们带来了多少方便。<br><br><span style="COLOR: rgb(51,153,102)">#include &lt;iostream&gt;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">#include &lt;algorithm&gt;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">#include &lt;map&gt;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">#include &lt;string&gt;</span><br style="COLOR: rgb(51,153,102)"><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">#include &lt;boost/lambda/lambda.hpp&gt;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">#include &lt;boost/lambda/bind.hpp&gt;</span><br style="COLOR: rgb(51,153,102)"><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">#include &lt;boost/assign/list_inserter.hpp&gt;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">#include &lt;boost/assign/list_of.hpp&gt;</span><br style="COLOR: rgb(51,153,102)"><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">using namespace std;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">using namespace boost::assign;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">using namespace boost::lambda;</span><br style="COLOR: rgb(51,153,102)"><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">int main()</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">{</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; map&lt;string,int&gt; months;&nbsp; </span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; </span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; insert( months )</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; ( "january",&nbsp;&nbsp; 31 )( "february", 28 )</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; ( "march",&nbsp;&nbsp;&nbsp;&nbsp; 31 )( "april",&nbsp;&nbsp;&nbsp; 30 )</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; ( "may",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 31 )( "june",&nbsp;&nbsp;&nbsp;&nbsp; 30 )</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; ( "july",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 31 )( "august",&nbsp;&nbsp; 31 )</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; ( "september", 30 )( "october",&nbsp; 31 )</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; ( "november",&nbsp; 30 )( "december", 31 );</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; </span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; map&lt;int,string&gt; persons = map_list_of</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; (2,"Amy")(3,"Ralph")</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; (5,"Simon")(7,"Maggie");</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; </span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; for_each( months.begin(), months.end(),</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; cout &lt;&lt; bind(&amp;map&lt;string,int&gt;::value_type::second, _1) &lt;&lt; "\t"</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; bind(&amp;map&lt;string,int&gt;::value_type::first, _1) &lt;&lt; "\n"</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; );</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; cout &lt;&lt; endl;</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; for_each( persons.begin(), persons.end(),</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp; cout &lt;&lt; bind(&amp;map&lt;int,string&gt;::value_type::first, _1) &lt;&lt; "\t"</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; bind(&amp;map&lt;int,string&gt;::value_type::second, _1) &lt;&lt; "\n"</span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">&nbsp; );&nbsp; </span><br style="COLOR: rgb(51,153,102)"><span style="COLOR: rgb(51,153,102)">}</span><br><br>输出：<br><br><span style="COLOR: rgb(128,128,128)">30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; april</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; august</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; december</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; february</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; january</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; july</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; june</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; march</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; may</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; november</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; october</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; september</span><br style="COLOR: rgb(128,128,128)"><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Amy</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ralph</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Simon</span><br style="COLOR: rgb(128,128,128)"><span style="COLOR: rgb(128,128,128)">7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Maggie</span><br></span><br></span></span></span></font>
<img src ="http://www.cppblog.com/wounkin/aggbug/25247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wounkin/" target="_blank">Wounkin</a> 2007-06-01 09:49 <a href="http://www.cppblog.com/wounkin/articles/25247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>effect STL条款45</title><link>http://www.cppblog.com/wounkin/articles/25246.html</link><dc:creator>Wounkin</dc:creator><author>Wounkin</author><pubDate>Fri, 01 Jun 2007 01:30:00 GMT</pubDate><guid>http://www.cppblog.com/wounkin/articles/25246.html</guid><wfw:comment>http://www.cppblog.com/wounkin/comments/25246.html</wfw:comment><comments>http://www.cppblog.com/wounkin/articles/25246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wounkin/comments/commentRss/25246.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wounkin/services/trackbacks/25246.html</trackback:ping><description><![CDATA[<p><font size=2><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>条款</span><span><font face="Times New Roman">45</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：注意</span><span><font face="Times New Roman">count</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>、</span><span><font face="Times New Roman">find</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>、</span><span><font face="Times New Roman">binary_search</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>、</span><span><font face="Times New Roman">lower_bound</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>、</span><span><font face="Times New Roman">upper_bound</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>和</span><span><font face="Times New Roman">equal_range</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>的区别</span><span>
<p></span></font></p>
<p><font size=2><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>对无序区间的查找，我们当然是</span><span><font face="Times New Roman">find</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>，只有当需要统计拷贝的个数，</span><span><font face="Times New Roman">count</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>才有意义。如果对有序区间</span><span><font face="Times New Roman">binary_search</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>告诉你是否有。如果要知道位置，</span><span><font face="Times New Roman">equal_range</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>是一个好的选择。对有序需要的统计当然</span><span><font face="Times New Roman">distance</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>配合</span><span><font face="Times New Roman">equal_range</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>当然要比</span><span><font face="Times New Roman">count</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>的效率高。</span><span>
<p></span></font></p>
<p><font size=2><span Roman?? New Times><span><font face="Times New Roman">1.<span Roman?? New Times>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>期望值是否存在？</span><span>
<p></span></font></p>
<p><font size=2><span><font face="Times New Roman">(1) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>无序区间：</span><span><font face="Times New Roman">find
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(2) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>有序区间：</span><span><font face="Times New Roman">binary_search
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(3) set</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">map</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">count
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(4) multiset</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">multimap</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">find
<p></font></span></font></p>
<p><font size=2><span Roman?? New Times><span><font face="Times New Roman">2.<span Roman?? New Times>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>期望值是否存在？如果有，第一个等于这个值的对象在哪里？</span><span>
<p></span></font></p>
<p><font size=2><span><font face="Times New Roman">(1) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>无序区间：</span><span><font face="Times New Roman">find
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(2) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>有序区间：</span><span><font face="Times New Roman">equal_range
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(3) set</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">map</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">count
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(4) multiset</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">multimap</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">find</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">lower_bound</font></span></font></p>
<p><font size=2><span Roman?? New Times><span><font face="Times New Roman">3.<span Roman?? New Times>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>第一个不在期望值之前的对象在哪里？</span><span>
<p></span></font></p>
<p><font size=2><span><font face="Times New Roman">(1) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>无序区间：</span><span><font face="Times New Roman">find_if
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(2) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>有序区间：</span><span><font face="Times New Roman">lower_bound
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(3) set</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">map</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">lower_bound
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(4) multiset</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">multimap</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">lower_bound</font></span></font></p>
<p><font size=2><span Roman?? New Times><span><font face="Times New Roman">4.<span Roman?? New Times>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>第一个在期望值之后的对象在哪里？</span><span>
<p></span></font></p>
<p><font size=2><span><font face="Times New Roman">(1) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>无序区间：</span><span><font face="Times New Roman">find_if
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(2) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>有序区间：</span><span><font face="Times New Roman">upper_bound
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(3) set</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">map</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">upper_bound
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(4) multiset</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">multimap</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">upper_bound</font></span></font></p>
<p><font size=2><span Roman?? New Times><span><font face="Times New Roman">5.<span Roman?? New Times>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>有多少对象等于期望值？</span><span>
<p></span></font></p>
<p><font size=2><span><font face="Times New Roman">(1) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>无序区间：</span><span><font face="Times New Roman">count
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(2) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>有序区间：</span><span><font face="Times New Roman">equal_range,</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>然后</span><span><font face="Times New Roman">distance
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(3) set</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">map</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">count
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(4) multiset</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">multimap</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">count</font></span></font></p>
<p><font size=2><span Roman?? New Times><span><font face="Times New Roman">6.<span Roman?? New Times>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></span></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>等于期望值的所有对象在哪里？</span><span>
<p></span></font></p>
<p><font size=2><span><font face="Times New Roman">(1) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>无序区间：</span><span><font face="Times New Roman">find</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>（迭代）</span><span>
<p></span></font></p>
<p><font size=2><span><font face="Times New Roman">(2) </font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>有序区间：</span><span><font face="Times New Roman">equal_range
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(3) set</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">map</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">equal_range
<p></font></span></font></p>
<p><font size=2><span><font face="Times New Roman">(4) multiset</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>或者</span><span><font face="Times New Roman">multimap</font></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>：</span><span><font face="Times New Roman">equal_range</font></span></font></p>
<p><font size=2><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span Roman?? New ?Times mso-hansi-font-family: Roman?; Times>当然，序列容器要用泛型算法，而关联容器用成员函数。</span></font></p>
<img src ="http://www.cppblog.com/wounkin/aggbug/25246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wounkin/" target="_blank">Wounkin</a> 2007-06-01 09:30 <a href="http://www.cppblog.com/wounkin/articles/25246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>