﻿<?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++博客-Error-随笔分类-理解stl</title><link>http://www.cppblog.com/Error/category/20130.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 04 Oct 2013 08:48:51 GMT</lastBuildDate><pubDate>Fri, 04 Oct 2013 08:48:51 GMT</pubDate><ttl>60</ttl><item><title>std::bind2nd简单理解</title><link>http://www.cppblog.com/Error/archive/2013/10/04/203537.html</link><dc:creator>Enic</dc:creator><author>Enic</author><pubDate>Fri, 04 Oct 2013 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/Error/archive/2013/10/04/203537.html</guid><wfw:comment>http://www.cppblog.com/Error/comments/203537.html</wfw:comment><comments>http://www.cppblog.com/Error/archive/2013/10/04/203537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Error/comments/commentRss/203537.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Error/services/trackbacks/203537.html</trackback:ping><description><![CDATA[<p>// 如果参数为const int&amp;类型，就会挂掉。据说是编译器实现的时候忽略了？<br />// 具体分析错误应该是这样: std::ptr_fun会构造出一个派生于binary_function的对象，<br />// 传递给他的模板参数就是函数参数类型，如果传递&amp;类型，会导致调用真是函数时候<br />// argument_type&amp;变成argument_type&amp;&amp;引发编译错误，除非能在std::prt_fun中推导出<br />// Val&amp;参数类型中的Val类型作为模板参数传递下去<br />bool Cmp(const int&amp; iLeft, const int&amp; iRight)<br />{<br />&nbsp;&nbsp;&nbsp; return true;<br />}</p>
<p>// std::binary_functiond在传递函数参数的时候已经分别生命了const TVal&amp; 和 TVal&amp;两个版本，<br />// 所以在实例化的时候不能传递const TVal&amp;上去，会造成编译错误<br />class Functor_Cmp : public std::binary_function&lt;int, int, bool&gt;<br />{<br />public:<br />&nbsp;&nbsp;&nbsp; bool operator () (const int&amp; iLeft, const int&amp; iRight) const<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br />&nbsp;&nbsp;&nbsp; }<br />};</p>
<p>void Test_Bind2end()<br />{<br />&nbsp;&nbsp;&nbsp; vector&lt;int&gt; vInt(9);</p>
<p>&nbsp;&nbsp;&nbsp; // 注意functor 和function ptr的区别<br />&nbsp;&nbsp;&nbsp; std::count_if(vInt.begin(), vInt.end(), std::bind2nd(std::ptr_fun(&amp;Cmp), 1));<br />&nbsp;&nbsp;&nbsp; std::count_if(vInt.begin(), vInt.end(), std::bind2nd(Functor_Cmp(), 1));<br />}</p><img src ="http://www.cppblog.com/Error/aggbug/203537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Error/" target="_blank">Enic</a> 2013-10-04 16:21 <a href="http://www.cppblog.com/Error/archive/2013/10/04/203537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>stream阶层体系</title><link>http://www.cppblog.com/Error/archive/2012/10/22/193671.html</link><dc:creator>Enic</dc:creator><author>Enic</author><pubDate>Mon, 22 Oct 2012 06:41:00 GMT</pubDate><guid>http://www.cppblog.com/Error/archive/2012/10/22/193671.html</guid><wfw:comment>http://www.cppblog.com/Error/comments/193671.html</wfw:comment><comments>http://www.cppblog.com/Error/archive/2012/10/22/193671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Error/comments/commentRss/193671.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Error/services/trackbacks/193671.html</trackback:ping><description><![CDATA[<p><a href="http://www.cppblog.com/images/cppblog_com/Error/WindowsLiveWriter/stream_CED3/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/Error/WindowsLiveWriter/stream_CED3/image_thumb.png" width="530" height="295" /></a> </p> <p>这个体系中的class职责如下：</p> <p>*ios_base：定义stream classes的所有&#8220;与字符类型以及相应的字符特性（traits）无关&#8221;的属性，主要包含状态和格式标志等组件和函数。</p> <p>*basic_ios&lt;&gt;：定义&#8220;与字符类型以及相应的字符特性（traits）相关&#8221;的stream classes共同属性，其中包括stream所用的缓冲器。</p> <p>*basic_istream&lt;&gt;&nbsp; basic_ostream&lt;&gt;：定义出读写对象，如果不关心国际化问题，一般直接使用char实例化的isteram和ostream。</p> <p>*basic_iostream&lt;&gt;：读写对象。</p> <p>*basic_streambuf&lt;&gt;：iostream体系的核心，定义出所有&#8220;可改写的stream或，可读取的stream&#8221;的接口。其他的stream classes都是利用它进行实际的字符读写操作。</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; iostream程序严格按照职责分离的原则来设计。basic_ios派生类型只处理数据格式化，实际读写操作由basic_ios派生类所维护的stream buffer完成。streambuf提供读写使用的字符缓冲区，形成对外的一种抽象概念。</p><img src ="http://www.cppblog.com/Error/aggbug/193671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Error/" target="_blank">Enic</a> 2012-10-22 14:41 <a href="http://www.cppblog.com/Error/archive/2012/10/22/193671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>