﻿<?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++博客-蜗牛的家-随笔分类-数据结构&amp;算法</title><link>http://www.cppblog.com/bangle/category/8016.html</link><description>男儿当自强</description><language>zh-cn</language><lastBuildDate>Tue, 29 Mar 2011 23:51:58 GMT</lastBuildDate><pubDate>Tue, 29 Mar 2011 23:51:58 GMT</pubDate><ttl>60</ttl><item><title>bind函数的简单实现</title><link>http://www.cppblog.com/bangle/archive/2011/03/22/142526.html</link><dc:creator>黑色天使</dc:creator><author>黑色天使</author><pubDate>Tue, 22 Mar 2011 15:46:00 GMT</pubDate><guid>http://www.cppblog.com/bangle/archive/2011/03/22/142526.html</guid><wfw:comment>http://www.cppblog.com/bangle/comments/142526.html</wfw:comment><comments>http://www.cppblog.com/bangle/archive/2011/03/22/142526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/bangle/comments/commentRss/142526.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/bangle/services/trackbacks/142526.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">stdafx.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">vector</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;Person<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;Person(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;name_(name)<br>&nbsp;&nbsp;&nbsp;&nbsp;{}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;Name()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;name_;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;SetName(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;name)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name_&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;name;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;name_;<br>};<br><br>template&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">typename&nbsp;R,&nbsp;typename&nbsp;T,&nbsp;typename&nbsp;Arg</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;simple_binder<br>{<br></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">explicit</span><span style="color: #000000;">&nbsp;simple_binder(R&nbsp;(T::</span><span style="color: #000000;">*</span><span style="color: #000000;">pfn)(Arg),&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;Arg</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;arg)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;pfn_(pfn)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;arg_(arg)<br>&nbsp;&nbsp;&nbsp;&nbsp;{}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;</span><span style="color: #0000ff;">operator</span><span style="color: #000000;">()(T</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;t)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;(t.</span><span style="color: #000000;">*</span><span style="color: #000000;">pfn_)(arg_);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #0000ff;">private</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;R&nbsp;(T::</span><span style="color: #000000;">*</span><span style="color: #000000;">pfn_)(Arg);<br>&nbsp;&nbsp;&nbsp;&nbsp;Arg&nbsp;arg_;<br>};<br><br>template&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">typename&nbsp;R,&nbsp;typename&nbsp;T,&nbsp;typename&nbsp;Arg</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>simple_binder</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">R,&nbsp;T,&nbsp;Arg</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>simple_bind(&nbsp;R&nbsp;(T::</span><span style="color: #000000;">*</span><span style="color: #000000;">pfn)(Arg),&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;Arg</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;arg)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;simple_binder</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">R,&nbsp;T,&nbsp;Arg</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(pfn,&nbsp;arg);<br>}<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;person(</span><span style="color: #000000;">"</span><span style="color: #000000;">Ralph</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">smimple_bind生成一个仿函数类，这个类构造时赋值了arg<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">遇到(person)时，调用这个仿函数类重载的()操作即<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">t.*pfn(arg)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">又回归为一个函数，不过参数可以自己控制了,娃哈哈</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;simple_bind(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">Person::SetName,&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">Martin</span><span style="color: #000000;">"</span><span style="color: #000000;">))(person);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;person.Name()&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;<br>}</span></div>
<br><img src ="http://www.cppblog.com/bangle/aggbug/142526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/bangle/" target="_blank">黑色天使</a> 2011-03-22 23:46 <a href="http://www.cppblog.com/bangle/archive/2011/03/22/142526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高性能运算(转)</title><link>http://www.cppblog.com/bangle/archive/2008/08/22/59626.html</link><dc:creator>黑色天使</dc:creator><author>黑色天使</author><pubDate>Fri, 22 Aug 2008 02:54:00 GMT</pubDate><guid>http://www.cppblog.com/bangle/archive/2008/08/22/59626.html</guid><wfw:comment>http://www.cppblog.com/bangle/comments/59626.html</wfw:comment><comments>http://www.cppblog.com/bangle/archive/2008/08/22/59626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/bangle/comments/commentRss/59626.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/bangle/services/trackbacks/59626.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/bangle/archive/2008/08/22/59626.html'>阅读全文</a><img src ="http://www.cppblog.com/bangle/aggbug/59626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/bangle/" target="_blank">黑色天使</a> 2008-08-22 10:54 <a href="http://www.cppblog.com/bangle/archive/2008/08/22/59626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>