﻿<?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++博客-明白了-随笔分类-STL &amp; Boost</title><link>http://www.cppblog.com/zgysx/category/2759.html</link><description>两岸猿声啼不住 轻舟已过万重山</description><language>zh-cn</language><lastBuildDate>Mon, 15 Jul 2013 10:00:08 GMT</lastBuildDate><pubDate>Mon, 15 Jul 2013 10:00:08 GMT</pubDate><ttl>60</ttl><item><title>boost之scope_exit</title><link>http://www.cppblog.com/zgysx/archive/2013/07/15/201826.html</link><dc:creator>永遇乐</dc:creator><author>永遇乐</author><pubDate>Mon, 15 Jul 2013 09:30:00 GMT</pubDate><guid>http://www.cppblog.com/zgysx/archive/2013/07/15/201826.html</guid><wfw:comment>http://www.cppblog.com/zgysx/comments/201826.html</wfw:comment><comments>http://www.cppblog.com/zgysx/archive/2013/07/15/201826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zgysx/comments/commentRss/201826.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zgysx/services/trackbacks/201826.html</trackback:ping><description><![CDATA[<div>在写程序的时候，经常要做一步就要判断这一步是否成功，如果不成功，则程序不能继续往下走了，得删除当前申请的资源。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;Fun()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;*&nbsp;p&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">int</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;error&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;p;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;*&nbsp;p1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">float</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;error1&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;p;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;p1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp; &nbsp; &nbsp;.......<br />&nbsp; &nbsp; &nbsp;.......<br />}</div>检查是否发生错误与删除资源的代码会越来越多，看上去十分之臃肿，boost提供了一个socp_exit，可以帮助我们解决上面之困。<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span>&nbsp;Fun()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;*&nbsp;pInt&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">int</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;*&nbsp;pFloat&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;<span style="color: #0000FF; ">float</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOST_SCOPE_EXIT(&nbsp;(&amp;pInt)&nbsp;(&amp;pFloat)&nbsp;)<span style="color: #008000; ">//</span><span style="color: #008000; ">以引用的形式进行变量捕获</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pInt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pInt&nbsp;=&nbsp;nullptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;pFloat;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pFloat&nbsp;=&nbsp;nullptr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;__FUNCTION__&nbsp;&lt;&lt;&nbsp;std::endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOST_SCOPE_EXIT_END;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;std::<span style="color: #0000FF; ">string</span>&nbsp;str("abc");<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOST_SCOPE_EXIT(&nbsp;str&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">以值传递的形式进行变量捕获</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;=&nbsp;"123";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;&lt;&lt;&nbsp;__FUNCTION__&nbsp;&lt;&lt;&nbsp;std::endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;BOOST_SCOPE_EXIT_END<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />}</div><br /><br /><br /><br />
</div><img src ="http://www.cppblog.com/zgysx/aggbug/201826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zgysx/" target="_blank">永遇乐</a> 2013-07-15 17:30 <a href="http://www.cppblog.com/zgysx/archive/2013/07/15/201826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用std::streambuf_iterator读取文件</title><link>http://www.cppblog.com/zgysx/archive/2006/11/04/14668.html</link><dc:creator>永遇乐</dc:creator><author>永遇乐</author><pubDate>Sat, 04 Nov 2006 08:54:00 GMT</pubDate><guid>http://www.cppblog.com/zgysx/archive/2006/11/04/14668.html</guid><wfw:comment>http://www.cppblog.com/zgysx/comments/14668.html</wfw:comment><comments>http://www.cppblog.com/zgysx/archive/2006/11/04/14668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zgysx/comments/commentRss/14668.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zgysx/services/trackbacks/14668.html</trackback:ping><description><![CDATA[
		<p>#include &lt;fstream&gt;<br />#include &lt;string&gt;</p>
		<p>using namespace std;</p>
		<p>void main()<br />{<br /> ifstream inputFile("Data.txt");<br /> if(!inputFile.is_open())<br />           return;<br />//这条语句在VC6下编译报错,VC6对模板支持不够<br /> string str((istreambuf_iterator&lt;char&gt;(inputFile)), istreambuf_iterator&lt;char&gt;());<br /> inputFile.close();<br />}</p>
<img src ="http://www.cppblog.com/zgysx/aggbug/14668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zgysx/" target="_blank">永遇乐</a> 2006-11-04 16:54 <a href="http://www.cppblog.com/zgysx/archive/2006/11/04/14668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]boost库的使用介绍</title><link>http://www.cppblog.com/zgysx/archive/2006/10/05/13365.html</link><dc:creator>永遇乐</dc:creator><author>永遇乐</author><pubDate>Thu, 05 Oct 2006 02:55:00 GMT</pubDate><guid>http://www.cppblog.com/zgysx/archive/2006/10/05/13365.html</guid><wfw:comment>http://www.cppblog.com/zgysx/comments/13365.html</wfw:comment><comments>http://www.cppblog.com/zgysx/archive/2006/10/05/13365.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zgysx/comments/commentRss/13365.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zgysx/services/trackbacks/13365.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.boost::any								boost::any是一种通用的数据类型，可以将各种类型包装后统一放入容器内最重要的它是类型安全的。有点象COM里面的variant.		使用方法：any::type() 返回包装的类型any_cast可用于any到其他类型的转化												 																#include 	...&nbsp;&nbsp;<a href='http://www.cppblog.com/zgysx/archive/2006/10/05/13365.html'>阅读全文</a><img src ="http://www.cppblog.com/zgysx/aggbug/13365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zgysx/" target="_blank">永遇乐</a> 2006-10-05 10:55 <a href="http://www.cppblog.com/zgysx/archive/2006/10/05/13365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]STL的使用时应注意的细节</title><link>http://www.cppblog.com/zgysx/archive/2006/10/05/13364.html</link><dc:creator>永遇乐</dc:creator><author>永遇乐</author><pubDate>Thu, 05 Oct 2006 02:35:00 GMT</pubDate><guid>http://www.cppblog.com/zgysx/archive/2006/10/05/13364.html</guid><wfw:comment>http://www.cppblog.com/zgysx/comments/13364.html</wfw:comment><comments>http://www.cppblog.com/zgysx/archive/2006/10/05/13364.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zgysx/comments/commentRss/13364.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zgysx/services/trackbacks/13364.html</trackback:ping><description><![CDATA[
		<p>1．循环中删除map元素的写法<br />typedef map&lt;int,int&gt; mymap;<br />typedef map&lt;int,int&gt;::iterator myiter;<br />mymap m;    m[1] = 2;    m[2] = -1;    m[3] = 3;    m[4] = 0;    m[5] = -5;    m[6] = 1;<br />myiter iter = m.begin();<br /> while(iter!=m.end())    <br />{<br />        if(iter-&gt;second&lt;0)   <br />            m.erase(iter++);<br />        else    <br />            ++iter;<br />}<br /></p>
		<p>2．vector&lt;char&gt;来储存二进制流<br /><br /><br />3．vector 的at方法会进行边界检查，[]操作符则不会<br /><br /><br />4.从ifstream读出一行到string，使用std::getline(ifstream的成员函数getline做不到)<br /></p>
		<p>5.警惕string的引用记数技术实现带来的潜在问题<br />string greet("Hello, world");<br />string hi(greet);<br />char *ptr = (char *)hi.c_str();<br />ptr[0] = 'h';<br />两个字符串都被修改。</p>
		<p>在多线程之间引用多个有关系的string，可能导致引用计数失效，造成多次删除，或者memory leak.<br />保险的做法是:<br />string s1("hello") ; string s2 (s1.c_str()); //force copy</p>
		<p>避免iterator失效，不提取无效的iterator<br />比如：<br />vector&lt;int&gt; iv;<br />vector&lt;int&gt;::iterator end = iv .end();<br />for(int i=0;i&lt;10;++i)<br />    iv.insert(end,i);<br />会crash ,因为end指针，随着insert后可能失效<br />改为：<br />vector&lt;int&gt; iv;<br />for(int i=0;i&lt;10;++i)<br />    iv.insert(iv.end(),i);<br />或者：<br />vector&lt;int&gt; iv;<br />for(int i=0;i&lt;10;++i)<br />    iv.push_back(i); //prefer</p>
		<p>
				<br /> </p>
<img src ="http://www.cppblog.com/zgysx/aggbug/13364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zgysx/" target="_blank">永遇乐</a> 2006-10-05 10:35 <a href="http://www.cppblog.com/zgysx/archive/2006/10/05/13364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>