﻿<?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++博客-huyutian-文章分类-编程技巧</title><link>http://www.cppblog.com/huyutian/category/12295.html</link><description>他强由他强，清风拂山岗；他横由他横，明月照大江。他自狠来他自恶，我自一口真气足
</description><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2015 04:30:52 GMT</lastBuildDate><pubDate>Tue, 11 Aug 2015 04:30:52 GMT</pubDate><ttl>60</ttl><item><title>关于pandas的DataFrame的一个性能问题</title><link>http://www.cppblog.com/huyutian/articles/211535.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Tue, 11 Aug 2015 01:15:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/211535.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/211535.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/211535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/211535.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/211535.html</trackback:ping><description><![CDATA[最近经常用pandas进行一些数据分析，感觉功能确实很强大，上手也还比较方便。但是无意见发现了一个关于DataFrame和Series赋值的性能问题。<br />从网上摘取一些数据一条一条的放入DataFrame中，当数据量较大时，感觉运行特别慢。原来还以为是DataFrame运算时比较耗时，但是用二维list数组读取数据，然后一次性放入DataFrame中却会快很多。写了一个简单的测试程序进行对比。<br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #800000; ">"""</span><span style="color: #800000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #800000; ">Created&nbsp;on&nbsp;Sun&nbsp;Jul&nbsp;12&nbsp;16:29:57&nbsp;2015<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #800000; ">@author:&nbsp;hbhuyt<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #800000; "></span><span style="color: #800000; ">"""</span><br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;pandas&nbsp;as&nbsp;pd<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;random<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;timeit<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;<br /><span style="color: #008080; ">10</span>&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;func1():<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa&nbsp;=&nbsp;[]<br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(200):<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa.append([random.randint(0,&nbsp;1000)&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;r&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(5)])<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdaa&nbsp;=&nbsp;pd.DataFrame(aa)<br /><span style="color: #008080; ">16</span>&nbsp;<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;func2():<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdbb&nbsp;=&nbsp;pd.DataFrame()<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;y&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(200):<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdbb[y]&nbsp;=&nbsp;pd.Series([random.randint(0,&nbsp;1000)&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;r&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(5)])<br /><span style="color: #008080; ">21</span>&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;func3():<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa&nbsp;=&nbsp;{}<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(200):<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aa[str(x)]&nbsp;=&nbsp;random.randint(0,&nbsp;1000)<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;psaa&nbsp;=&nbsp;pd.Series(aa)<br /><span style="color: #008080; ">27</span>&nbsp;<br /><span style="color: #008080; ">28</span>&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;func4():<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;psbb&nbsp;=&nbsp;pd.Series()<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;y&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(200):<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;psbb[str(y)]&nbsp;=&nbsp;random.randint(0,&nbsp;1000)<br /><span style="color: #008080; ">32</span>&nbsp;<br /><span style="color: #008080; ">33</span>&nbsp;<br /><span style="color: #008080; ">34</span>&nbsp;t1&nbsp;=&nbsp;timeit.timeit(stmt&nbsp;=func1,&nbsp;number=1000)<br /><span style="color: #008080; ">35</span>&nbsp;t2&nbsp;=&nbsp;timeit.timeit(stmt&nbsp;=func2,&nbsp;number=1000)<br /><span style="color: #008080; ">36</span>&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;t1,&nbsp;t2<br /><span style="color: #008080; ">37</span>&nbsp;t3&nbsp;=&nbsp;timeit.timeit(stmt&nbsp;=func3,&nbsp;number=1000)<br /><span style="color: #008080; ">38</span>&nbsp;t4&nbsp;=&nbsp;timeit.timeit(stmt&nbsp;=func4,&nbsp;number=1000)<br /><span style="color: #008080; ">39</span>&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;t3,&nbsp;t4<br /><span style="color: #008080; ">40</span>&nbsp;</div><br /><br />测试结果如下图：<br /><img src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20150811091139.png" width="684" height="187" alt="" /><br />可以看出DataFrame一行一行的填充数据是非常耗时的（与添加行的列数关系不大），最好是list或dict等标准容器填充数据后一次性导入到DataFrame中去。<img src ="http://www.cppblog.com/huyutian/aggbug/211535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2015-08-11 09:15 <a href="http://www.cppblog.com/huyutian/articles/211535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于python字典key值查找效率的测试</title><link>http://www.cppblog.com/huyutian/articles/209772.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Mon, 09 Feb 2015 12:34:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/209772.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/209772.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/209772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/209772.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/209772.html</trackback:ping><description><![CDATA[偶尔闲逛，看到有个帖子讨论python的dict中查找key值效率的。索性写了下面的测试程序，结果一目了然。<br />测试环境Win 7 64位操作系统，python版本为2.7.6<br />为防止cache对前后代码速度的影响，先测试五次，两段代码交换后再测试五次。测试结果可以看出"in" 比has_key要稍稍快一点点，差别其实很小，只是在大字典中时才能看出来。<br /><img src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20150209201951.gif" width="1174" height="723" alt="" /><br /><img src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20150209201646.gif" width="1152" height="723" alt="" /><br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">#</span><span style="color: #008000; ">以下测试比较has_key&nbsp;和in查找字典元素的速度</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">测试方法：测试五次，然后颠倒两段代码顺序再测试五次</span><span style="color: #008000; "><br /></span>dict&nbsp;=&nbsp;{<span style="color: #800000; ">'</span><span style="color: #800000; ">Age</span><span style="color: #800000; ">'</span>:&nbsp;7};<br /><span style="color: #008000; ">#</span><span style="color: #008000; ">先构造一个100000元素的大字典</span><span style="color: #008000; "><br /></span>i&nbsp;=&nbsp;0<br /><span style="color: #0000FF; ">while</span>&nbsp;(i&lt;100000):<br />&nbsp;&nbsp;&nbsp;&nbsp;key0&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">%05d</span><span style="color: #800000; ">'</span>&nbsp;%&nbsp;i<br />&nbsp;&nbsp;&nbsp;&nbsp;dict[key0]&nbsp;=&nbsp;i&nbsp;*&nbsp;i&nbsp;+&nbsp;3&nbsp;*&nbsp;i&nbsp;+&nbsp;5<br />&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i+1<br /><span style="color: #008000; ">#</span><span style="color: #008000; ">测试has_key指令查找key值100000次</span><span style="color: #008000; "><br /></span>i&nbsp;=&nbsp;0<br />count&nbsp;=&nbsp;0<br />t0&nbsp;=&nbsp;time.time()<br /><span style="color: #0000FF; ">while</span>(i&nbsp;&lt;&nbsp;100000):<br />&nbsp;&nbsp;&nbsp;&nbsp;key0&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">%05d</span><span style="color: #800000; ">'</span>&nbsp;%&nbsp;random.randint(0,&nbsp;99999)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;dict.has_key(key0):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;+=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;i+=1<br />t1&nbsp;=&nbsp;time.time()&nbsp;-&nbsp;t0<br /><span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">spent&nbsp;%f&nbsp;seconds,&nbsp;found&nbsp;%d&nbsp;key.</span><span style="color: #800000; ">"</span>&nbsp;%&nbsp;(t1,&nbsp;count)<br /><span style="color: #008000; ">#</span><span style="color: #008000; ">测试in指令查找key值100000次</span><span style="color: #008000; "><br /></span>i&nbsp;=&nbsp;0<br />count&nbsp;=&nbsp;0<br />t0&nbsp;=&nbsp;time.time()<br /><span style="color: #0000FF; ">while</span>(i&nbsp;&lt;&nbsp;100000):<br />&nbsp;&nbsp;&nbsp;&nbsp;key0&nbsp;=&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">%05d</span><span style="color: #800000; ">'</span>&nbsp;%&nbsp;random.randint(0,&nbsp;99999)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;key0&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;dict:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;+=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;i+=1<br />t1&nbsp;=&nbsp;time.time()&nbsp;-&nbsp;t0<br /><span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">spent&nbsp;%f&nbsp;seconds,&nbsp;found&nbsp;%d&nbsp;key.</span><span style="color: #800000; ">"</span>&nbsp;%&nbsp;(t1,&nbsp;count)</div><div id="haloword-lookup" class="ui-widget-content ui-draggable"><div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio><div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div></div><div id="haloword-content"></div></div> <div id="haloword-lookup" class="ui-widget-content"><div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio><div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div></div><div id="haloword-content"></div></div><img src ="http://www.cppblog.com/huyutian/aggbug/209772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2015-02-09 20:34 <a href="http://www.cppblog.com/huyutian/articles/209772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从dll文件自动生成lib文件</title><link>http://www.cppblog.com/huyutian/articles/208620.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sun, 19 Oct 2014 01:18:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/208620.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/208620.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/208620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/208620.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/208620.html</trackback:ping><description><![CDATA[前几天偶尔逛codeproject，发现了这个好东东。放在这里分享一下。<br />
原文地址：http://www.codeproject.com/Articles/2752/How-to-create-lib-file-when-you-only-have-dll-and?msg=3572427#xx3572427xx<br />
有时候你希望在自己的C代码中调用别人的一个DLL，但是又没有lib文件，就会很麻烦。由dll文件逆向生成lib文件手工方法网上已经有很多介绍了，自己百度一下啊<br />
这个是将整个手工方法用makefile来自动完成。（btw：makefile真的很强大，专业程序员都应该学一学）<br />
makefile代码如下，文本编辑器复制粘贴后，另存为dll2lib.makefile<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 />
-->.SUFFIXES:&nbsp;.def&nbsp;.dll&nbsp;.lib<br />
.def.lib:<br />
&nbsp;&nbsp;&nbsp;&nbsp;lib&nbsp;/machine:IX86&nbsp;/nodefaultlib&nbsp;/def:$*.def&nbsp;&amp;&nbsp;<span style="color: #0000FF; ">set</span>&nbsp;retval=%?&nbsp;&amp;&nbsp;del&nbsp;$*.exp&nbsp;&gt;&nbsp;NUL&nbsp;&amp;&nbsp;EXIT&nbsp;%retval<br />
.dll.def:<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;LIBRARY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$*&nbsp;&gt;&nbsp;$*.def<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;EXPORTS&nbsp;&gt;&gt;&nbsp;$*.def<br />
&nbsp;&nbsp;&nbsp;&nbsp;dumpbin&nbsp;/exports&nbsp;$*.dll&nbsp;|&nbsp;sed&nbsp;-n&nbsp;"s/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><img src="http://www.cppblog.com/Images/dot.gif" alt="" />&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" />.&nbsp;0<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><img src="http://www.cppblog.com/Images/dot.gif" alt="" />.&nbsp;\([^&nbsp;]*\)/&nbsp;&nbsp;&nbsp;&nbsp;\1/p"&nbsp;&gt;&gt;&nbsp;$*.def<br />
&nbsp;<br />
somedllname.lib:&nbsp;somedllname.def</div>
<br />
运行需要的环境和工具：<br />
sed.exe可<span style="background-color: #ffffff;">以从</span><span style="color: #111111; font-family: 'Segoe UI', Arial, sans-serif; line-height: normal;">&nbsp;</span><a href="http://sourceforge.net/projects/unxutils/files/" style="margin: 0px; padding: 0px; border: 0px; text-decoration: none; color: #005782; word-break: break-all; font-family: 'Segoe UI', Arial, sans-serif; line-height: normal; background-color: #fff9e2;"><span style="background-color: #ffffff;">http://sourceforge.net/projects/unxutils/files/</span></a><span style="background-color: #ffffff;">下</span><span style="background-color: #ffffff;">载</span>，解包后在UnxUtils.zip\usr\local\wbin目录可以找到<br />
进入visual studio 命令行环境，<span style="background-color: #ffffff;">把你的dll文件改</span><span style="background-color: #ffffff;">名为</span><span style="font-family: Consolas, 'Courier New', Courier, mono; font-size: 9pt; line-height: normal; white-space: pre-wrap; background-color: #ffffff;">somedllname.dll，记得要把sed.exe放在同一个目录下。</span><span style="font-family: Consolas, 'Courier New', Courier, mono; font-size: 9pt; line-height: normal; white-space: pre-wrap; background-color: #fbedbb;"><br /></span><span style="background-color: #ffffff;">
运行 namke dll2lib.makefile，自动生成</span><span style="background-color: #ffffff;">somedllname.</span><span style="background-color: #ffffff;">lib和</span><span style="font-family: Consolas, 'Courier New', Courier, mono; font-size: 12px; line-height: normal; white-space: pre-wrap; background-color: #ffffff;">somedllname.exp文件。<br /></span><span style="font-family: Consolas, 'Courier New', Courier, mono; font-size: 12px; line-height: normal; white-space: pre-wrap; background-color: #fbedbb;"><br /><img src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20141019090445.gif" width="673" height="296" alt="" />
</span>
注意：这种方法对于没有输出函数名的dll是无效的。<br /><br /><div>关于visual c++名字修饰的详细介绍，看这里</div><div>http://zh.wikipedia.org/wiki/Visual_C%2B%2B%E5%90%8D%E5%AD%97%E4%BF%AE%E9%A5%B0#.E7.B1.BB.E5.9E.8B.E7.9A.84.E7.BC.96.E7.A0.81.E8.A1.A8.E7.A4.BA</div>
<div id="haloword-lookup" class="ui-widget-content ui-draggable">
<div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio>
<div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div>
</div>
<div id="haloword-content"></div>
</div>
<div id="haloword-lookup" class="ui-widget-content">
<div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio>
<div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div>
</div>
<div id="haloword-content"></div>
</div>
<div id="haloword-lookup" class="ui-widget-content">
<div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio>
<div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div>
</div>
<div id="haloword-content"></div>
</div>
 <div id="haloword-lookup" class="ui-widget-content"><div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio><div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div></div><div id="haloword-content"></div></div> <div id="haloword-lookup" class="ui-widget-content"><div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio><div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div></div><div id="haloword-content"></div></div><img src ="http://www.cppblog.com/huyutian/aggbug/208620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2014-10-19 09:18 <a href="http://www.cppblog.com/huyutian/articles/208620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学笔记（六） </title><link>http://www.cppblog.com/huyutian/articles/205763.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sat, 15 Feb 2014 13:12:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/205763.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/205763.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/205763.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/205763.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/205763.html</trackback:ping><description><![CDATA[Google App Engine编程<br />GAE计划任务：Cron服务<br />GAE的cron服务允许你配置在指定时间或固定间隔周期运行的计划任务。例如，你可以每天发一份电子邮件报告，每隔10分钟更新缓存数据等等。cron使用HTTP GET请求调用一个URL。被cron调用的HTTP请求可以运行长达10分钟，如果期间没有发生另一个HTTP请求。免费GAE应用可以有最多20个计划任务，付费GAE应用可以有100个计划任务。<br />使用计划任务，你需要在GAE应用的根目录下建立一个cron.yaml配置文件，典型的配置文件如下<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 />-->cron:<br />-&nbsp;description:&nbsp;daily&nbsp;summary&nbsp;job<br />&nbsp;&nbsp;url:&nbsp;/tasks/summary<br />&nbsp;&nbsp;schedule:&nbsp;every&nbsp;24&nbsp;hours<br />-&nbsp;description:&nbsp;monday&nbsp;morning&nbsp;mailout<br />&nbsp;&nbsp;url:&nbsp;/mail/weekly<br />&nbsp;&nbsp;schedule:&nbsp;every&nbsp;monday&nbsp;09:00<br />&nbsp;&nbsp;timezone:&nbsp;Australia/NSW<br />-&nbsp;description:&nbsp;new&nbsp;daily&nbsp;summary&nbsp;job<br />&nbsp;&nbsp;url:&nbsp;/tasks/summary<br />&nbsp;&nbsp;schedule:&nbsp;every&nbsp;24&nbsp;hours<br />&nbsp;&nbsp;target:&nbsp;version-2</div>一个cron.yaml文件可以包含多个任务。每个任务必须有一个URL网址和一个schedule。description,timezone和target是可选项。description将显示在管理控制台和开发服务器的管理界面。<br />url域指定你的应用中一个由cron服务调用的地址。<br />schedule格式可以有以下几种<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 />-->every&nbsp;12&nbsp;hours<br />every&nbsp;5&nbsp;minutes&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;10:00&nbsp;to&nbsp;14:00<br />2nd,third&nbsp;mon,wed,thu&nbsp;of&nbsp;march&nbsp;17:00<br />every&nbsp;monday&nbsp;09:00<br />1st&nbsp;monday&nbsp;of&nbsp;sep,oct,nov&nbsp;17:00<br />every&nbsp;day&nbsp;00:00</div><br />上传cron任务<br /><div>你可以使用appcfg.py上传cron任务并查看有关cron任务的信息。使用"appcfg.py update"命令上传更新您的应用，cron服务与cron.yaml的内容更新。你可以用appcfg.py update_cron命令只更新cron配置，而无需上传程序。<br />删除所有cron任务，只需要如下修改cron.yaml。<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 />-->cron:</div>GAE关于cron官方文档参见<a href="https://developers.google.com/appengine/docs/python/config/cron">这里</a>。</div><img src ="http://www.cppblog.com/huyutian/aggbug/205763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2014-02-15 21:12 <a href="http://www.cppblog.com/huyutian/articles/205763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学笔记（五） </title><link>http://www.cppblog.com/huyutian/articles/205735.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sat, 15 Feb 2014 13:12:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/205735.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/205735.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/205735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/205735.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/205735.html</trackback:ping><description><![CDATA[部署python程序到google app engine <br />一、gae的部署需要python2.X。于是我的电脑中就不得不又安装了一个python2.7版。为了保证gae访问的是正确的python版本，需要打开Google App Engine Launcher后，选择菜单Edit-&gt;Preference修改python解释器的路径。<br />二、部署demo应用<br />选择菜单File-&gt;Add demo Application-&gt;python-&gt;guestbook可以创建一个demo应用，通过运行demo应用可以了解GAE的开发方法。<br />可惜的是，初次部署完guestbook后，运行会出错。打开Logs会提示错误信息: 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 5px; text-transform: none; background-color: #f5f5f5; font-variant: normal; font-style: normal; text-indent: 0px; margin: 5px 0px; padding-left: 5px; letter-spacing: normal; padding-right: 5px; font-family: 'Courier New' !important; white-space: normal; color: #000000; font-size: 12px !important; overflow: auto; border-top: #cccccc 1px solid; font-weight: normal; border-right: #cccccc 1px solid; word-spacing: 0px; padding-top: 5px; -webkit-text-stroke-width: 0px" class="cnblogs_code"><pre style="margin: 0px 0px 0px 22px; font-family: 'Courier New' !important; word-wrap: break-word; white-space: pre-wrap; font-size: 12px !important">UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)</pre></div><br class="Apple-interchange-newline" />Google搜索后发现原来是python 2.7的库文件Lib/mimetypes.py存在bug.解决办法参照<a href="http://bugs.python.org/file19332/9291a.patch">这里</a>修改。行前标记+的是需要新增的内容，行前标记-的是要删除的内容。保存退出后，再运行guestbook就没问题了。注意+from itertools import count这一行不要漏掉了。<img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20140212222221.jpg" width="793" height="446" /><br />三、本地调试Google App Engine应用<br />错误"from google.appengine.api import urlfetch<br />ImportError: No module named google.appengine.api"。这是因为环境变量没有设置正确。<br />在环境变量增加一条PythonPath=&#8220;your google app engine path&#8221;<br /><img src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20140214222520.jpg" width="357" height="145" alt="" /><br /><div>错误No api proxy found for service "urlfetch"<br />本地调试urlfetch调用时，会遇到这种错误。解决办法<br /><div><div>from google.appengine.api import apiproxy_stub_map</div><div>from google.appengine.api import urlfetch_stub<br /><br /><div>apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap()&nbsp;</div><div>apiproxy_stub_map.apiproxy.RegisterStub('urlfetch', urlfetch_stub.URLFetchServiceStub())<br />如果需要调试其他gae API（比如mail,datastore),可以添加以下代码<br /><div>from google.appengine.api import datastore_file_stub&nbsp;</div><div>from google.appengine.api import mail_stub&nbsp;</div><div>from google3.apphosting.api import user_service_stub&nbsp;</div><div></div><div>apiproxy_stub_map.apiproxy.RegisterStub('user',&nbsp;</div><div>user_service_stub.UserServiceStub())&nbsp;</div><div>apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3',&nbsp;</div><div>&nbsp; datastore_file_stub.DatastoreFileStub('your_app_id', '/dev/null', '/&nbsp;</div><div>dev/null'))&nbsp;</div><div>apiproxy_stub_map.apiproxy.RegisterStub('mail',&nbsp;</div><div>mail_stub.MailServiceStub())<br /><br />调试gae应用程序，也可以考虑使用在线python调试环境http://py-ide-online.appspot.com/</div><div>或者使用Google提供的unittest功能。可以参考官网文档<a href="https://developers.google.com/appengine/docs/python/tools/localunittesting#Python_Introducing_the_Python_testing_utilities">这里</a>。<br /><br /><div>python ImportError: No module named yaml错误</div><div>我的运行环境是win7 64位，本想使用easy_install pyyaml来安装，结果没找到。</div><div>只好从<a href="https://pypi.python.org/pypi/PyYAML">官网下载</a> pyyaml源码，然后执行：python setup.py --without-libyaml install重新编译并安装。</div></div><div></div></div></div></div></div><pre style="text-transform: none; text-indent: 0px; margin: 0px 0px 0px 22px; letter-spacing: normal; font: 12px/21px 'Courier New'; word-wrap: break-word; white-space: pre-wrap; color: #000000; word-spacing: 0px; -webkit-text-stroke-width: 0px"><span style="line-height: 1.5 !important; font-family: 'Courier New' !important; color: #000000; font-size: 12px !important"></span></pre><img src ="http://www.cppblog.com/huyutian/aggbug/205735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2014-02-15 21:12 <a href="http://www.cppblog.com/huyutian/articles/205735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python技巧摘录（一）</title><link>http://www.cppblog.com/huyutian/articles/205669.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sat, 15 Feb 2014 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/205669.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/205669.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/205669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/205669.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/205669.html</trackback:ping><description><![CDATA[一、将dictionary转换为字符串<br />python 3.0+<br /><div>&gt;&gt;&gt; k = {'MASTER_HOST': '10.178.226.196', 'MASTER_PORT': 9999}</div><div>&gt;&gt;&gt; <span style="color: #0000ff;">', '.join("{!s}={!r}".format(k,v) for (k,v) in k.items())</span></div><div>"MASTER_PORT=9999, MASTER_HOST='10.178.226.196'"<br />python 2.X<br /><div><span style="color: #0000ff;">', '.join("%s=%r" % (key,val) for (key,val) in k.iteritems())</span><br />区别于str()<br /><div>&gt;&gt;&gt; k = {'MASTER_HOST': '10.178.226.196', 'MASTER_PORT': 9999}</div><div>&gt;&gt;&gt; <span style="color: #0000ff;">str(k)</span></div><div>"{'MASTER_PORT': 9999, 'MASTER_HOST': '10.178.226.196'}"<br />二、<span style="background-color: #ffffff; color: #333333; font-family: Verdana, 宋体, Helvetica, sans-serif;">数字转换为以十六进制字符串<br />hex()：注意转换的字符串以0x开头<br /></span><div><span style="color: #0000ff;">'{:x}'.format(int)</span>：转换后去掉了前面的0x<br /><span style="color: #333333; font-family: Verdana, 宋体, Helvetica, sans-serif; background-color: #ffffff;">十六进制的字符串转为十进制数字<br /></span><div>&gt;&gt;&gt; int('0xff',16)</div><div>255</div><div>&gt;&gt;&gt; int('ff',16)</div><div>255</div></div></div></div></div><img src ="http://www.cppblog.com/huyutian/aggbug/205669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2014-02-15 21:11 <a href="http://www.cppblog.com/huyutian/articles/205669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学笔记（四）</title><link>http://www.cppblog.com/huyutian/articles/205650.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sat, 15 Feb 2014 13:10:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/205650.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/205650.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/205650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/205650.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/205650.html</trackback:ping><description><![CDATA[知识准备<br />一、安装调用包<br /><div>httplib2是一个功能全面的HTTP client库</div><span style="font-family: Tahoma; font-size: 12px;">1. 官网下载地址</span><br /><div>https://code.google.com/p/httplib2/</div><div><span style="font-size: 12px; font-family: Tahoma;">2.解压安装</span></div><div><span style="font-size: 12px; font-family: Tahoma;">假设解压到：D:/httplib2，命令行执行</span><font face="Tahoma"><span style="font-size: 12px;">D:/httplib2&gt;python setup.py install就ok</span></font><br /><font face="Tahoma"><span style="font-size: 12px;">二、</span></font><span style="font-size: 12px;">使用 pdb 进行调试</span><div><span style="font-size: 12px;">pdb 是 python 自带的一个包，为 python 程序提供了一种交互的源代码调试功能，主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令。</span></div><div><span style="font-size: 12px;">命令</span><span style="font-size: 12px; white-space: pre;">	           </span><span style="font-size: 12px;">解释</span></div><div><span style="font-size: 12px;">break 或 b &nbsp; 设置断点<span style="white-space:pre">	</span>设置断点</span></div><div><span style="font-size: 12px;">cl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 清除指定的断点。如果没有带参数,则清除所有断点。</span></div><div><span style="font-size: 12px;">disable &nbsp; &nbsp; &nbsp; &nbsp;取消所有断点的功能,但仍然保留这些断点。</span></div><div><span style="font-size: 12px;">enable &nbsp; &nbsp; &nbsp; &nbsp; 恢复断点的功能。</span></div><div><span style="font-size: 12px;">continue 或 c<span style="white-space:pre">	</span>继续执行程序</span></div><div><span style="font-size: 12px;">list 或 l &nbsp; &nbsp; &nbsp;&nbsp;<span style="white-space:pre">  </span>查看当前行的代码段</span></div><div><span style="font-size: 12px;">step 或 s &nbsp; <span style="white-space: pre;">&nbsp;  </span>进入函数<br /></span><span style="font-size: 12px;">next 或 n</span><span style="font-size: 12px; white-space: pre;">	    </span><span style="font-size: 12px;">执行下一行</span><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">return 或 r &nbsp; &nbsp;执行代码直到从当前函数返回</span></div><div><span style="font-size: 12px;">exit 或 q<span style="white-space:pre">	    </span>中止并退出</span></div><div><span style="font-size: 12px;">p <span style="white-space: pre;">&nbsp;                </span>打印变量的值</span><br /><div><br />有好几种方法来使用pdb：</div><div>1.用python3 -m pdb myscript.py来运行脚本。</div><div>2.在需要调试的代码前面插入pdb.set_trace()。 当然，先要import pdb包。如果觉得麻烦，可以在py文件的开头就调用pdb.set_trace(). 然后就能像gdb一样的调试了。帮助可以用help来查看。</div><div><span style="font-size: 12px;">Python IDLE中进行调试程序</span></div><div><span style="font-size: 12px;">IDLE分python shell窗口和py文件编辑窗口两种窗口。前者是用来debug的，后者是用来编写py文件的。</span></div><div><span style="font-size: 12px;">如果要启用debug功能，需要先在python shell窗口中打开debuger: 点点击Debug-&gt;Debuger。然后在py文件编辑窗口点击Run-&gt;Run Module（或者F5）就可以开始调试了。在开始调试后，可以在py文件编辑窗口用右键来设置断点。</span></div><div></div></div><div></div></div><img src ="http://www.cppblog.com/huyutian/aggbug/205650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2014-02-15 21:10 <a href="http://www.cppblog.com/huyutian/articles/205650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学笔记（三）</title><link>http://www.cppblog.com/huyutian/articles/205632.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sat, 15 Feb 2014 13:09:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/205632.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/205632.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/205632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/205632.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/205632.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; &nbsp; &nbsp;这次学习的目标是实现115.com的自动登录、签到、摇一摇。115是国内流行的网盘。容量大，可分享的资源丰富。115网站为吸引用户，设置了签到功能和摇一摇功能。本篇希望写出一个能自动登录签到的python程序。搜索了一下，网上已经有高手9deadblue@gmail.com写好：妖妖舞娘为一个Google App Engine（GAE）应用，利用GAE的调度...&nbsp;&nbsp;<a href='http://www.cppblog.com/huyutian/articles/205632.html'>阅读全文</a><img src ="http://www.cppblog.com/huyutian/aggbug/205632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2014-02-15 21:09 <a href="http://www.cppblog.com/huyutian/articles/205632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学笔记（二）</title><link>http://www.cppblog.com/huyutian/articles/205631.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Tue, 04 Feb 2014 01:43:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/205631.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/205631.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/205631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/205631.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/205631.html</trackback:ping><description><![CDATA[python自带的IDLE用来写写简单的小程序是足够了，但如果打算认真学python，还是有必要配置一个良好的开发环境。参考了网上的大量文章，最终我选择了sublime text 2。<br />sublime text 2 是非常好用的免费跨平台编辑器，目前从<a href="http://www.sublimetext.com/2">官网</a>可以下载最新的2.02版本。安装好后本身默认支持build python(快捷键Ctrl+B)。但是<span style="font-size: 12px;">代码中如果使用了input等函数进行交互的时候，运行信息栏内无法输入交互信息，程序还会提示报错。</span><br /><span style="font-size: 12px;">sublime text 2支持灵活的自定义和package插件。</span><br /><div><span style="font-size: 12px;">安装Sublime Text 2插件有两种方法：</span></div><div><span style="font-size: 12px;">1.直接安装</span></div><div><span style="font-size: 12px;">直接下载插件安装包解压缩到Packages目录（菜单-&gt;preferences-&gt;packages）。</span></div><div><span style="font-size: 12px;">2.</span><span style="font-size: 12px;">使用Package Control组件安装</span></div><div><span style="font-size: 12px;">先安装package control组件，然后直接在线安装。</span><span style="font-size: 12px;">按Ctrl+`调出console</span></div><div><span style="font-size: 12px;">粘贴以下代码到底部命令行并回车（参考<a href="https://sublime.wbond.net/installation">这里</a>）：<br /></span><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; ">import</span>&nbsp;urllib2,os;pf=<span style="color: #800000; ">'</span><span style="color: #800000; ">Package&nbsp;Control.sublime-package</span><span style="color: #800000; ">'</span>;ipp=sublime.installed_packages_path();os.makedirs(ipp)&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;os.path.exists(ipp)&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;None;open(os.path.join(ipp,pf),<span style="color: #800000; ">'</span><span style="color: #800000; ">wb</span><span style="color: #800000; ">'</span>).write(urllib2.urlopen(<span style="color: #800000; ">'</span><span style="color: #800000; ">http://sublime.wbond.net/</span><span style="color: #800000; ">'</span>+pf.replace(<span style="color: #800000; ">'</span><span style="color: #800000; ">&nbsp;</span><span style="color: #800000; ">'</span>,<span style="color: #800000; ">'</span><span style="color: #800000; ">%20</span><span style="color: #800000; ">'</span>)).read())</div></div><div><span style="font-size: 12px;">重启Sublime Text 2。</span></div><div><span style="font-size: 12px;">如果在Perferences-&gt;package settings中看到package control这一项，就表示安装成功啦。有时候package安装失败是因为</span><span style="color: #222222; font-family: 微软雅黑, 宋体, 'Trebuchet MS', Tahoma, Arial, sans-serif; line-height: 22px; background-color: #ffffff;">github网络访问出错。可以考虑</span>使用GoAgent代理科学上网下载Package后直接安装。</div><div><span style="font-size: 12px;">用Package Control安装插件的方法：</span></div><div><span style="font-size: 12px;">按下Ctrl+Shift+P调出命令面板，</span><span style="font-size: 12px;">输入install 调出 Install Package 选项并回车，然后在列表中选中要安装的插件。<br /><br /></span><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">SublimeREPL 插件可以完美支持python的build和debug。</span></div>为<span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">SublimeREPL</span>配置快捷键<br />打开sublime text 2, 选菜单Preferences -&gt;key Bindings User增加以下代码，就为Python增加了两个快捷键：F5 - &#8220;Python RUN current file&#8221;<br />Ctrl+F5 - &#8220;Python - PDB current file&#8221;。更多关于如何设置快捷键可以参照官网<a href="http://sublimetext.info/docs/en/reference/key_bindings.html">这里</a>。快捷键的设置，最重要的是要找到应用的id和文件位置，<span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">SublimeREPL与python有关的各项id可以参照</span><a href="https://github.com/wuub/SublimeREPL/blob/master/config/Python/Default.sublime-commands">网页</a>，也可以在你安装的sublime text 2目录下找到Default.sublime-commands文件，我选择的默认安装，对应目录是C:\Users\*****\AppData\Roaming\Sublime Text 2\Packages\SublimeREPL\config\Python<br />更多有关sublime text 2自定义快捷键，可以参照<a href="http://docs.sublimetext.info/en/latest/customization/key_bindings.html">这里</a><span style="font-size: 12px;">。</span><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 />-->[<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">keys</span><span style="color: #800000; ">"</span>:&nbsp;[<span style="color: #800000; ">"</span><span style="color: #800000; ">f5</span><span style="color: #800000; ">"</span>],<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">caption</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">SublimeREPL:&nbsp;Python&nbsp;-&nbsp;RUN&nbsp;current&nbsp;file</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">command</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">run_existing_window_command</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">args</span><span style="color: #800000; ">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">id</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">repl_python_run</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">file</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">config/Python/Main.sublime-menu</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">keys</span><span style="color: #800000; ">"</span>:&nbsp;[<span style="color: #800000; ">"</span><span style="color: #800000; ">ctrl+f5</span><span style="color: #800000; ">"</span>],<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">caption</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">SublimeREPL:&nbsp;Python&nbsp;-&nbsp;PDB&nbsp;current&nbsp;file</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">command</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">run_existing_window_command</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">args</span><span style="color: #800000; ">"</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">id</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">repl_python_pdb</span><span style="color: #800000; ">"</span>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">file</span><span style="color: #800000; ">"</span>:&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">config/Python/Main.sublime-menu</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />]</div><img src ="http://www.cppblog.com/huyutian/aggbug/205631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2014-02-04 09:43 <a href="http://www.cppblog.com/huyutian/articles/205631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学笔记（一）</title><link>http://www.cppblog.com/huyutian/articles/203598.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Tue, 04 Feb 2014 00:37:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/203598.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/203598.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/203598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/203598.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/203598.html</trackback:ping><description><![CDATA[写完这篇blog，却忘发了，呵呵<br />python向往很久了，国庆得闲终于决定开始学习这门语言。我的计划是以实用为目的，边用边学。首先当然先看看入门书，了解了解语法和大致结构，安装编程环境，这个花了差不多一天时间。<br />下载python请到官网<span style="font-size: 12px;">http://www.python.org/getit/，目前最新版为3.3.2。建议直接下载最新版学习，从python2.7到3.3.2有较大改变，很多网站的教材都是针对2.x版本的，对3.x都不再适用了。比如：print &#8220;hello!"语句在2.x版中是可以的，但3.x版中必须改为print("hello")。最好是直接用官网的教程和说明文档，更新及时，不会存在版本差异造成的问题。<br /><br />第一目标：写一个搜索Fling!毛毛球碰撞游戏的答案的程序<br /></span><span style="color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">Fling!是苹果iphone系统的一个小游戏，后来也被移植到安卓系统中。游戏玩法就是通过碰撞棋盘上的小球，使最后只剩下一个球。</span><br style="word-wrap: normal; color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;" /><span style="color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">itune网址</span><a href="https://itunes.apple.com/us/app/fling!/id325815008?mt=8" target="_blank" style="word-wrap: normal; color: #334f77; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">https://itunes.apple.com/us/app/fling!/id325815008?mt=8</a><br style="word-wrap: normal; color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;" /><span style="color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">android网址</span><a href="https://play.google.com/store/apps/details?id=com.mbgames.fling" target="_blank" style="word-wrap: normal; color: #334f77; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">https://play.google.com/store/apps/details?id=com.mbgames.fling</a><br style="word-wrap: normal; color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;" /><span style="background-color: #f3f9f6; color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei;">超喜欢这个游戏，前面20多关难度都不算大，但是27关以后就没那么容易解决了。我先用excel的vba宏写了一个程序，可惜vba运行太慢，25个球的解答就要搜索近半个小时。现在想把它改写成python版本。excel版的毛球解决程序我已经放在这里了</span><a href="http://club.excelhome.net/thread-1061267-1-1.html">http://club.excelhome.net/thread-1061267-1-1.html<br /></a><br />最后实现的代码如下，用到了class，数据存储使用了list[].<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: #008080; ">&nbsp; 1</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;copy<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;Fling:<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;<span style="color: #800080; ">__init__</span>(self,&nbsp;parent=0,&nbsp;balls=[[0]*7&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;range(8)]):<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls&nbsp;=&nbsp;copy.deepcopy(balls)<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.code&nbsp;=&nbsp;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;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">balls's&nbsp;hash&nbsp;code</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.scan&nbsp;=&nbsp;False<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parent&nbsp;=&nbsp;parent<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.y&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.direct&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;setCode(self):<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.code&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;y&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;range(0,8):<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;range(0,7):<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.balls[y][x]&nbsp;!=&nbsp;0:<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.code&nbsp;=&nbsp;self.code&nbsp;*&nbsp;131&nbsp;+&nbsp;x<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.code&nbsp;=&nbsp;self.code&nbsp;%&nbsp;16393001&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">防止溢出</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.code&nbsp;=&nbsp;self.code&nbsp;*&nbsp;131&nbsp;+&nbsp;y<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.code&nbsp;=&nbsp;self.code&nbsp;%&nbsp;16393001<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;reset(self):<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls&nbsp;=&nbsp;[[0]*7&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;range(8)]<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.scan&nbsp;=&nbsp;False<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.code&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.parent&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.x&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.y&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.direct&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;collision(self,&nbsp;x,&nbsp;y,&nbsp;direct):<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;False<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;向上抛球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;direct&nbsp;==&nbsp;0:<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;y&nbsp;-&nbsp;1<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;i&nbsp;&gt;=&nbsp;0:<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.balls[i][x]&nbsp;!=&nbsp;0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">遇到球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;flag&nbsp;==&nbsp;False:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">遇到第一个球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;i&nbsp;==&nbsp;y&nbsp;-&nbsp;1:<br /><span style="color: #008080; ">&nbsp;40</span>&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;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">exit&nbsp;while</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;42</span>&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;self.balls[i&nbsp;+&nbsp;1][x]&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">母球移动到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">碰撞成立</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;i&nbsp;!=&nbsp;y&nbsp;-&nbsp;1:<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[i&nbsp;+&nbsp;1][x]&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">母球移动到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;i<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i&nbsp;-&nbsp;1<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;向右抛球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;direct&nbsp;==&nbsp;1:<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;x&nbsp;+&nbsp;1<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;i&nbsp;&lt;&nbsp;7:<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.balls[y][i]&nbsp;!=&nbsp;0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">遇到球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;flag&nbsp;==&nbsp;False:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">遇到第一个球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;i&nbsp;==&nbsp;x&nbsp;+&nbsp;1:<br /><span style="color: #008080; ">&nbsp;57</span>&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;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">相邻球不能碰撞</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;59</span>&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;self.balls[y][i&nbsp;-&nbsp;1]&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">母球移动到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">碰撞成立</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;i&nbsp;!=&nbsp;x&nbsp;+&nbsp;1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">非相邻球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;62</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;63</span>&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;self.balls[y][i&nbsp;-&nbsp;1]&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">母球移动到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;i&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;<span style="color: #008000; ">#</span><span style="color: #008000; ">被撞球成为新的母球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;向下抛球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;direct&nbsp;==&nbsp;2:<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;y&nbsp;+&nbsp;1<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;i&nbsp;&lt;&nbsp;8:<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.balls[i][x]&nbsp;!=&nbsp;0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">遇到球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;flag&nbsp;==&nbsp;False:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">遇到第一个球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;i&nbsp;==&nbsp;y&nbsp;+&nbsp;1:<br /><span style="color: #008080; ">&nbsp;74</span>&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;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">exit&nbsp;while</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;76</span>&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;self.balls[i&nbsp;-&nbsp;1][x]&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">母球移动到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">碰撞成立</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;i&nbsp;!=&nbsp;y&nbsp;+&nbsp;1:<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[i&nbsp;-&nbsp;1][x]&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">母球移动到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;i<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;向左抛球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;direct&nbsp;==&nbsp;3:<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;x&nbsp;-&nbsp;1<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;i&nbsp;&gt;=&nbsp;0:<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;self.balls[y][i]&nbsp;!=&nbsp;0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">遇到球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;89</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;flag&nbsp;==&nbsp;False:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">遇到第一个球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;i&nbsp;==&nbsp;x&nbsp;-&nbsp;1:<br /><span style="color: #008080; ">&nbsp;91</span>&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;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">相邻球不能碰撞</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;92</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;93</span>&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;self.balls[y][i&nbsp;+&nbsp;1]&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">母球移动到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">碰撞成立</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">elif</span>&nbsp;i&nbsp;!=&nbsp;x&nbsp;-&nbsp;1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">非相邻球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">&nbsp;97</span>&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;self.balls[y][i&nbsp;+&nbsp;1]&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">母球移动到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;i&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;<span style="color: #008000; ">#</span><span style="color: #008000; ">被撞球成为新的母球</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i&nbsp;-&nbsp;1<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;flag&nbsp;==&nbsp;True:&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;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">碰撞成立，最后一个球移出屏幕</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">102</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.balls[y][x]&nbsp;=&nbsp;0<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.setCode()<br /><span style="color: #008080; ">104</span>&nbsp;<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;flag<br /><span style="color: #008080; ">106</span>&nbsp;<br /><span style="color: #008080; ">107</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;import&nbsp;pdb</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">108</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;pdb.set_trace()&nbsp;#&nbsp;opens&nbsp;up&nbsp;pdb&nbsp;prompt</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">109</span>&nbsp;<span style="color: #008000; "></span><br /><span style="color: #008080; ">110</span>&nbsp;question&nbsp;=&nbsp;[[1,0,0,1,0,1,0],&nbsp;\<br /><span style="color: #008080; ">111</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0,1,0,0,0,0,0],&nbsp;\<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0,0,0,0,0,0,1],&nbsp;\<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0,0,0,1,1,0,0],&nbsp;\<br /><span style="color: #008080; ">114</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0,0,0,1,0,0,0],&nbsp;\<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0,0,1,1,1,0,0],&nbsp;\<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0,0,1,0,0,0,0],&nbsp;\<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0,0,1,0,0,0,0]]<br /><span style="color: #008080; ">118</span>&nbsp;myTree&nbsp;=&nbsp;[]<br /><span style="color: #008080; ">119</span>&nbsp;myTree.append(Fling(0,&nbsp;question))<br /><span style="color: #008080; ">120</span>&nbsp;myHash&nbsp;=&nbsp;[]<br /><span style="color: #008080; ">121</span>&nbsp;myHash.append(myTree[0].code)<br /><span style="color: #008080; ">122</span>&nbsp;<br /><span style="color: #008080; ">123</span>&nbsp;i&nbsp;=&nbsp;0<br /><span style="color: #008080; ">124</span>&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;i&nbsp;&lt;&nbsp;len(myTree):<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;myTree[i].scan&nbsp;!=&nbsp;True:<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;x&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;range(0,7):<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;y&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;range(0,8):<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;myTree[i].balls[y][x]&nbsp;==&nbsp;0:<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span><br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;snap&nbsp;=&nbsp;Fling(i,&nbsp;myTree[i].balls)<br /><span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;snap.collision(x,y,0):<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;snap.code&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;myHash:<br /><span style="color: #008080; ">134</span>&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;snap.x&nbsp;=&nbsp;x<br /><span style="color: #008080; ">135</span>&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;snap.y&nbsp;=&nbsp;y<br /><span style="color: #008080; ">136</span>&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;snap.direct&nbsp;=&nbsp;0<br /><span style="color: #008080; ">137</span>&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;myTree.append(snap)<br /><span style="color: #008080; ">138</span>&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;myHash.append(snap.code)<br /><span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;snap&nbsp;=&nbsp;Fling(i,&nbsp;myTree[i].balls)<br /><span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;snap.collision(x,y,1):<br /><span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;snap.code&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;myHash:<br /><span style="color: #008080; ">143</span>&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;snap.x&nbsp;=&nbsp;x<br /><span style="color: #008080; ">144</span>&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;snap.y&nbsp;=&nbsp;y<br /><span style="color: #008080; ">145</span>&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;snap.direct&nbsp;=&nbsp;1<br /><span style="color: #008080; ">146</span>&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;myTree.append(snap)<br /><span style="color: #008080; ">147</span>&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;myHash.append(snap.code)<br /><span style="color: #008080; ">148</span>&nbsp;<br /><span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;snap&nbsp;=&nbsp;Fling(i,&nbsp;myTree[i].balls)<br /><span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;snap.collision(x,y,2):<br /><span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;snap.code&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;myHash:<br /><span style="color: #008080; ">152</span>&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;snap.x&nbsp;=&nbsp;x<br /><span style="color: #008080; ">153</span>&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;snap.y&nbsp;=&nbsp;y<br /><span style="color: #008080; ">154</span>&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;snap.direct&nbsp;=&nbsp;2<br /><span style="color: #008080; ">155</span>&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;myTree.append(snap)<br /><span style="color: #008080; ">156</span>&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;myHash.append(snap.code)<br /><span style="color: #008080; ">157</span>&nbsp;<br /><span style="color: #008080; ">158</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;snap&nbsp;=&nbsp;Fling(i,&nbsp;myTree[i].balls)<br /><span style="color: #008080; ">159</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;snap.collision(x,y,3):<br /><span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;snap.code&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;myHash:<br /><span style="color: #008080; ">161</span>&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;snap.x&nbsp;=&nbsp;x<br /><span style="color: #008080; ">162</span>&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;snap.y&nbsp;=&nbsp;y<br /><span style="color: #008080; ">163</span>&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;snap.direct&nbsp;=&nbsp;3<br /><span style="color: #008080; ">164</span>&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;myTree.append(snap)<br /><span style="color: #008080; ">165</span>&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;myHash.append(snap.code)<br /><span style="color: #008080; ">166</span>&nbsp;<br /><span style="color: #008080; ">167</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myTree[i].scan&nbsp;=&nbsp;True<br /><span style="color: #008080; ">168</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;1<br /><span style="color: #008080; ">169</span>&nbsp;<br /><span style="color: #008080; ">170</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">查找所有弹球动作</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">171</span>&nbsp;<span style="color: #008000; "></span>i&nbsp;=&nbsp;len(myTree)&nbsp;-&nbsp;1<br /><span style="color: #008080; ">172</span>&nbsp;actions&nbsp;=&nbsp;[]<br /><span style="color: #008080; ">173</span>&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;myTree[i].parent&nbsp;!=&nbsp;0:<br /><span style="color: #008080; ">174</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actions.append([myTree[i].x,&nbsp;myTree[i].y,&nbsp;myTree[i].direct])<br /><span style="color: #008080; ">175</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;myTree[i].parent<br /><span style="color: #008080; ">176</span>&nbsp;<span style="color: #0000FF; ">else</span>:<br /><span style="color: #008080; ">177</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actions.append([myTree[i].x,&nbsp;myTree[i].y,&nbsp;myTree[i].direct])<br /><span style="color: #008080; ">178</span>&nbsp;<br /><span style="color: #008080; ">179</span>&nbsp;<span style="color: #0000FF; ">print</span>(<span style="color: #800000; ">"</span><span style="color: #800000; ">Answer:\nx&nbsp;y&nbsp;direct(0:up,1:right,2:down,3:left)</span><span style="color: #800000; ">"</span>)<br /><span style="color: #008080; ">180</span>&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;element&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;reversed(actions):<br /><span style="color: #008080; ">181</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>(element[0],&nbsp;element[1],&nbsp;element[2])<br /><span style="color: #008080; ">182</span>&nbsp;<br /><span style="color: #008080; ">183</span>&nbsp;</div><img src ="http://www.cppblog.com/huyutian/aggbug/203598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2014-02-04 08:37 <a href="http://www.cppblog.com/huyutian/articles/203598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初识Windows64位编程</title><link>http://www.cppblog.com/huyutian/articles/192882.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Fri, 05 Oct 2012 09:15:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/192882.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/192882.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/192882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/192882.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/192882.html</trackback:ping><description><![CDATA[一、了解64位系统<br />关于64位系统有很多术语，包括x64,IA-64,Intel 64,<span style="font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 20px; background-color: #ffffff; ">AMD64</span><span style="font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 20px; background-color: #ffffff; ">等等。花时间了解了一点其中的差异。根据兼容性大致可以分为两类</span><span style="font-family: Arial, Tahoma, Verdana, sans-serif; font-weight: bold; line-height: 20px; background-color: #ffffff; ">IA-64和</span><span style="font-family: Arial, Tahoma, Verdana, sans-serif; font-weight: bold; line-height: 20px; background-color: #ffffff; ">Intel 64。<br /></span>IA-64：或者说叫<span style="font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 20px; background-color: #ffffff; ">Itanium(安腾)系列，是Intel和HP公司开发的一个64位体系架构，主要用于服务器市场，与x86体系不兼容。<br />Intel 64</span>：包括EM64T / AMD64 / x86-64 / x64等，它是对x86体系架构的扩展，并向后兼容。由于名称很多，所以很容易混淆。具体了解可参见<a href="http://en.wikipedia.org/wiki/X86-64#cite_note-amd-24593-0">WIKI</a>。<br />要想了解64位C++编程，请看<a href="http://www.viva64.com/en/l/">这里</a>。<br />二、编译第一个64位程序<br />近期将个人电脑升级到Win7系统，编译器也换成了Visual Studio 2010。有一个Project需要用到zlib库。于是从<a href="http://www.zlib.net/">http://www.zlib.net/</a>下载了一份最新的zlib1.2.7<br />但是在编译64位动态库时却出错了。<img src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20121005165719.png" width="852" height="243" alt="" /><br />根据我的分析，应该与<span style="font-size: 12px;">PreBuildEvent</span>预处理环境有关。因为我在win32环境下编译就没有问题。为啥在x64环境下PreBuildEvent找不到"..\..\contrib\masmx64"路径呢？那么到底在执行PreBuildEvent操作时，当前的目录是哪里了？查了半天资料没找到，在郁闷的时候我想到了一个办法。嘿嘿，关键时候还得靠自己啊。PreBuildEvent操作时执行的其实是一个多行的批处理命令（当然是支持宏替换的）。我直接在PreBuildEvent批命令中加入了一行<br /><img src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20121005170814.png" width="658" height="363" alt="" /><br />运行结果是<br /><img src="http://www.cppblog.com/images/cppblog_com/huyutian/QQ截图20121005171002.png" width="452" height="317" alt="" /><br />可以看出，X64&nbsp;PreBuildEvent执行时的当前目录是"D:\Projects\zlib-1.2.7\contrib\vstudio\vc10"，检查一下zlib的目录结构，所以将"cd ..\..\contrib\masmx64"这一行修改为"cd ..\..\masmx64"就ok了。<img src ="http://www.cppblog.com/huyutian/aggbug/192882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2012-10-05 17:15 <a href="http://www.cppblog.com/huyutian/articles/192882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DLL装载时出现死锁的分析</title><link>http://www.cppblog.com/huyutian/articles/153095.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Thu, 11 Aug 2011 13:46:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/153095.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/153095.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/153095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/153095.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/153095.html</trackback:ping><description><![CDATA[<font face="Verdana" color="#000000">最近用DLL封装一个接口时，出现了死锁。调试分析发现是在DLL初始化时调用了<font face="Verdana" color="#000000">CreateTimerQueue()</font>函数。这个函数会创建一个新的线程。正是由于在DLL初始化时创建新线程导致的死锁。<br />相似问题讨论网页在这里<br /><font face="Verdana" color="#000000">http://www.eggheadcafe.com/software/aspnet/33401802/problem-createtimerqueue-in-initinstance.aspx<br /></font><br />Note that you cannot do anything that creates threads in a DLL's InitInstance; any attempt to do so will deadlock your application.<br /><br /><a href="http://msdn.microsoft.com/en-us/windows/hardware/gg487379.aspx">Best Practices for Creating DLLs<br /></a><br /><a href="http://support.microsoft.com/kb/153867">Multimedia Timer Hangs in MFC DLL InitInstance<br /></a><br />其实除了InitInsatance函数外，<font face="Verdana" color="#000000">DllMain</font>，全局变量初始化如果直接或间接创建了新的工作线程都会造成死锁。Best Practices for Creating DLLs介绍了DLL装载详细过程，英文好的兄弟可以自己研究下。</font> 为防资料丢失，在这里保存一份<a href="/Files/huyutian/DLL_bestprac.zip">/Files/huyutian/DLL_bestprac.zip</a><img src ="http://www.cppblog.com/huyutian/aggbug/153095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2011-08-11 21:46 <a href="http://www.cppblog.com/huyutian/articles/153095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows系统三种定时器的分析</title><link>http://www.cppblog.com/huyutian/articles/149717.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Wed, 29 Jun 2011 02:46:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/149717.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/149717.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/149717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/149717.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/149717.html</trackback:ping><description><![CDATA[<font face="Verdana" color="#000000">Windows系统三种定时器的分析<br />目前，Windows下的定时器编程主要有三种方式。<br />1)SetTimer定时器是利用Windows窗口消息WM_TIMER来实现的。使用方法非常简单，SetTimer创建定时器，KillTimer销毁定时器。使用条件是调用线程必须要有窗口消息队列message queue，因此如果是工作线程就无法使用这种方法。<br />2)WaitableTimer定时器，其实应该算是一种线程同步对象，CreateWaitableTimer创建定时器对象，SetWaitableTimer设置定时器回调函数，CLoseHandle销毁定时器。WaitableTimer可以跨线程、进程使用，只要知道定时器对象名字（创建定时器时设置）就可以控制该定时器对象了。WaitableTimer定时器的回调函数实际上是一个APC（Asynchronous Procedure Calls）异步过程调用函数。<br />关于APC方面的知识可参考&#8220;谈谈对APC的一点理解&#8221;一文http://blog.csdn.net/wwwwly/archive/2009/07/10/4337907.aspx<br />3)TimerQueueTimer定时器，应该算迄今为止Windows系统最强大的定时器了。他可以支持多种工作模式，而且定时精度也是最高的。<br />使用时，首先要调用CreateTimerQueue创建一个定时器队列，然后用<br />CreateTimerQueueTimer来创建一个TimerQueueTimer定时器，<br />WT_EXECUTEDEFAULT，默认设置，回调函数将进入一个非I/O工作线程队列<br />WT_EXECUTEINTIMERTHREAD，回调函数作为APC，在定时器线程中被调用，被调用的条件是线程进入可警告等待状态alertable wait status。仅适用于短时任务，否则可能会影响队列中的其他定时器。<br />WT_EXECUTEINIOTHREAD，回调函数进入一个I/O工作线程队列,<br />请注意，大多数定时器都需要调用线程进入可警告等待状态alertable wait status，并不是随随便便就能发生定时调用的。一个线程是否进入可警告等待状态可参见微软的说明<a href="http://msdn.microsoft.com/en-us/library/ms686307.aspx">http://msdn.microsoft.com/en-us/library/ms686307.aspx</a><br />A thread goes into an alertable wait state by calling either SleepEx, MsgWaitForMultipleObjectsEx, WaitForSingleObjectEx, or WaitForMultipleObjectsEx, with the function's bAlertable parameter set to TRUE.<br />所以希望定时器不受这种可警告等待状态的影响，最好是用TimerQueue来完成。</font><img src ="http://www.cppblog.com/huyutian/aggbug/149717.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2011-06-29 10:46 <a href="http://www.cppblog.com/huyutian/articles/149717.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编译器是如何将特殊常数的除法转换为等效的乘法的</title><link>http://www.cppblog.com/huyutian/articles/124742.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Wed, 25 Aug 2010 14:26:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/124742.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/124742.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/124742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/124742.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/124742.html</trackback:ping><description><![CDATA[今天调试一个程序时遇到了一段奇怪的汇编代码<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; eax, 68DB8BADh<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp; edi<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; movsx&nbsp;&nbsp; ecx, word ptr [esi+0Eh]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; imul&nbsp;&nbsp;&nbsp; ecx<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sar&nbsp;&nbsp;&nbsp;&nbsp; edx, 0Ch<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; eax, edx<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shr&nbsp;&nbsp;&nbsp;&nbsp; eax, 1Fh<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp;&nbsp; edx, eax<br>看了半天也没看明白，主要是这个68DB8BADh出现的很突兀，与前后代码在逻辑上都不相关联。到网上搜了下，还居然找到了答案。原来这是一段编译器将除法优化为乘法运算的典型代码。众所周知，除法是最耗CPU的，能够转化为等效的乘法就要快得多了。但不是每次除法都能这么优化的。对于一些特定数作为被除数时，这种优化还是很有效的。<br><a href="http://www.thesolver.it/Manuali/Factotum/source/076.htm">http://www.thesolver.it/Manuali/Factotum/source/076.htm</a>这里列出了一些典型数的除法转换表。<br><img height=435 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/d32.GIF" width=386 border=0><br>这个表是32位运算下除法转换为乘法的一些案例。比如68DB8BADh这个魔术数就是用来转换除以625的。要计算x/625 = (x * 68DB8BADh) &gt;&gt;8.所以上面的代码其实就是计算[esi +0Eh] / 10000.<br>下面这个表是64位运算时除法转换为乘法的一些魔术数，摘录在此，以防备忘<br><img height=435 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/d64.GIF" width=386 border=0><br>如果想搞清楚相关的运算原理可以看该网站的<span lang=EN-GB style="FONT-SIZE: 16.5pt; FONT-FAMILY: Arial" xml:lang="EN-GB">Chapter 10. Integer Division by Constants</span> ，网址是<a href="http://www.thesolver.it/Manuali/Factotum/source/062.htm">http://www.thesolver.it/Manuali/Factotum/source/062.htm</a><br>大家也可以自己编一段小程序验证一下。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getchar();<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a=%d\nb=a/10000=%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;a,&nbsp;b);<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000"></span></div>
在VC2008下设置项目编译属性Assembler Output，选择输出汇编代码，看看编译出来的代码与上面的完全一致。<br><img height=281 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/compile.GIF" width=741 border=0>
<img src ="http://www.cppblog.com/huyutian/aggbug/124742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-08-25 22:26 <a href="http://www.cppblog.com/huyutian/articles/124742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴: VC 2005 解决方案的目录结构设置和管理</title><link>http://www.cppblog.com/huyutian/articles/123630.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Mon, 16 Aug 2010 14:25:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/123630.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/123630.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/123630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/123630.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/123630.html</trackback:ping><description><![CDATA[<p>今天在网上看到一篇VC项目管理的文章，感觉非常有用。特别是对大、中型项目的规范化、条理化管理非常有帮助，特转贴这里。<br>VC 2005 解决方案的目录结构设置和管理<br>&nbsp;<br>Roger (<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#111;&#103;&#101;&#114;&#50;&#121;&#105;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">roger2yi@gmail.com</a>)<br>&nbsp;<br>一个中等规模的解决方案通常都会包含多个项目，其中一些项目产出静态库，一些产出动态库，一些用于单元测试，还有的产出最终的应用程序执行档。除此以外，根据项目的需求，还会使用一些第三方的库。<br>&nbsp;<br>所以为解决方案设置一个合理的目录结构，不但可以使得代码管理更井井有条，项目成员之间也更容易相互配合，更重要的是能够使得最终应用程序的安装包制作，源代码打包发布和转移变得十分容易。<br>&nbsp;<br>解决方案与项目：<br>从VC6之后VC系列就使用解决方案（Solution）来替代原来的工作空间，用于组织和管理多个相关的项目（Project）。<br>&nbsp;<br>文章首先演示一个虚拟的解决方案和我们期望得到的目录结构，然后使用VC2005的项目设置功能来一步一步达到我们的需求。<br>&nbsp;<br>&nbsp;<br>虚拟解决方案：<br>&nbsp;<br>该虚拟解决方案名为GMA，包含一个动态链接库项目ChocolateMilk和一个应用程序项目PureMilk，需要使用一个第三方库log4cxx（Apache log4j的C++移植版本，用于日志输出）。<br>&nbsp;<br>log4cxx是以动态库的方式编译的，所以我们需要它的3样东西，分别是头文件，导入库（log4cxx.lib, log4cxxd.lib）和动态链接库（log4cxx.dll）。<br>&nbsp;<br>假设我们期望的目录结构如下图：<br>&nbsp;<img height=478 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/o_gma.jpg" width=364 border=0></p>
<p>&nbsp;<br>1． GMA是解决方案目录<br>2． PureMilk和ChocolateMilk是项目目录<br>3． Lib目录用于存放导入库或者静态库（包括第三方库和自己的项目）<br>4． Include用于存放第三方库的头文件<br>5． Bin目录存放所有动态链接库和执行档，包括自己的产出和第三方库，区分Release和Debug两个版本。另外，程序运行过程中需要外部的数据文件和启动时需要的配置文件等等都可放于该目录<br>6． Temp用于存放临时生成文件，其中Compile存放编译器编译时生成的obj文件，Link存放链接器的输出文件。<br>&nbsp;<br>上面目录结构清晰，一面了然，当我们的程序需要制作安装包或者要打包源码<br>发布的时候，它能够使得我们生活变得更容易^_^<br>&nbsp;<br>制作安装包时我们只需将&#8220;/GMA/Bin/Release/&#8221;目录下的所有文件打包。<br>&nbsp;<br>发布和转移源码的时候我们可以打包除了Temp目录以外&#8220;/GMA/&#8221;下面的所有文件和目录（如果不需要执行档，也可不包括Bin）。<br>&nbsp;<br>我们的需求是明确的，可是VC 2005并不会自动为我们做好上面所有的事情。不过我们并不需要编写复杂的编译脚本（makefile），只需要简单的修改项目的缺省设置即可。<br>&nbsp;<br>我们需要VC为我们做的事情包括：<br>&nbsp;<br>1．使用&#8220;/GMA/Temp/Compile/&#8221;作为项目编译时使用的中间目录<br>2．使用&#8220;/GMA/Temp/Link/&#8221;作为项目链接的输出目录<br>3．当项目是应用程序时，在构建结束后拷贝执行文件到&#8220;/GMA/Bin/Release/&#8221;或&#8220;/GMA/Bin/Debug/&#8221;，当项目是动态链接库时，除了拷贝dll到Bin，还拷贝导入库到&#8220;/GMA/Lib/&#8221;<br>4．当项目是应用程序时，调试时运行&#8220;/GMA/Bin/Debug/&#8221;或&#8220;/GMA/Bin/Release/&#8221;下面的执行文件，并以&#8220;/GMA/Bin/Debug/&#8221;或&#8220;/GMA/Bin/Release/&#8221;为工作目录<br>&nbsp;<br>首先看一下项目设置中可以使用的宏，常用的有：<br>&nbsp;
<table style="WIDTH: 320px; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>ConfigurationName</td>
            <td>配置名字，通常是Debug或者Release <br></td>
        </tr>
        <tr>
            <td>&nbsp;IntDir </td>
            <td>编译器使用的中间目录，产出obj文件 <br></td>
        </tr>
        <tr>
            <td>OutDir</td>
            <td>链接器使用的输出目录 </td>
        </tr>
        <tr>
            <td>ProjectDir</td>
            <td>项目目录</td>
        </tr>
        <tr>
            <td>ProjectName</td>
            <td>项目名字</td>
        </tr>
        <tr>
            <td>SolutionDir</td>
            <td>&nbsp;解决方案目录</td>
        </tr>
        <tr>
            <td>TargetDir</td>
            <td>目标输出文件所在的目录</td>
        </tr>
        <tr>
            <td>TargetExt </td>
            <td>目标输出的扩展名</td>
        </tr>
        <tr>
            <td>TargetFileName</td>
            <td>目标输出文件名，包括扩展名</td>
        </tr>
        <tr>
            <td>TargetName</td>
            <td>目标输出名，不包括扩展名</td>
        </tr>
        <tr>
            <td>TargetPath </td>
            <td>目标输出文件的全路径名 </td>
        </tr>
    </tbody>
</table>
<br><img height=548 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/o_gma_1.jpg" width=520 border=0><br>&nbsp;首先来设置ChocolateMilk：<br>&nbsp;<br>1．使用&#8220;/GMA/Temp/Compile/&#8221;作为项目编译时使用的中间目录<br>2．使用&#8220;/GMA/Temp/Link/&#8221;作为项目链接的输出目录<br>&nbsp;<br>&nbsp;<img height=587 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/o_gma_2.jpg" width=749 border=0><br>&nbsp;<br>注意高亮的部分，首先将配置改成All Configuration（全部配置），这样可以让我们同时修改Debug和Release的部分；<br>&nbsp;<br>Output Directory（输出目录，链接器）栏位填入：<br>$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)<br>&nbsp;<br>Intermediate Directory（中间目录，编译器）栏位填入：<br>$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)<br>&nbsp;<br>3．构建结束后拷贝动态链接库到&#8220;/GMA/Bin/Release/&#8221;或&#8220;/GMA/Bin/Debug/&#8221;，拷贝导入库到&#8220;/GMA/Lib/&#8221;<br>&nbsp;<br>我们通常都会在Debug版本的输出库后面加上字母&#8220;d&#8221;以表示这是Debug版本，在Debug配置下，修改Import Library栏位：<br>&nbsp;<img height=143 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/o_gma_3.jpg" width=616 border=0><br>&nbsp;<br>&nbsp;<br>VC可以让我们设置构建前后执行的脚本程序，所以为了完成3，<br>我们需要写构建后执行的脚本：<br>&nbsp;<img height=314 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/o_gma_4.jpg" width=729 border=0><br>&nbsp;<br>在Command Line中填入，Debug配置下：<br>&nbsp;<br>copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;<br>copy $(TargetDir)$(TargetName)d.lib $(SolutionDir)\Lib\;<br>&nbsp;<br>Release配置下：<br>&nbsp;<br>copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;<br>copy $(TargetDir)$(TargetName).lib $(SolutionDir)\Lib\;<br>&nbsp;<br>之所以要分别设置是因为VC没有表示导入库的宏名字 -_-P<br>&nbsp;<br>OK，到此为止，你就可以编译ChocolateMilk项目试试是不是一切正常了，不过请确认拷贝的目标目录事先建立好。<br>&nbsp;<br>接下来我们设置应用程序项目PureMilk：<br>&nbsp;<br>1．使用&#8220;/GMA/Temp/Compile/&#8221;作为项目编译时使用的中间目录<br>2．使用&#8220;/GMA/Temp/Link/&#8221;作为项目链接的输出目录<br>&nbsp;<br>首先将配置改成All Configuration（全部配置），这样可以让我们同时修改Debug和Release的部分；<br>&nbsp;<br>Output Directory（输出目录，链接器）栏位填入：<br>$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)<br>&nbsp;<br>Intermediate Directory（中间目录，编译器）栏位填入：<br>$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)<br>&nbsp;<br>3．构建结束后拷贝执行文件到&#8220;/GMA/Bin/Release/&#8221;或&#8220;/GMA/Bin/Debug/&#8221; <br>&nbsp;<br>在Command Line中填入，All配置下：<br>&nbsp;<br>copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName);<br>&nbsp;<br>4．调试时运行&#8220;/GMA/Bin/Debug/&#8221;或&#8220;/GMA/Bin/Release/&#8221;下面的执行文件，并以&#8220;/GMA/Bin/Debug/&#8221;或&#8220;/GMA/Bin/Release/&#8221;为工作目录<br>&nbsp;<img height=200 alt="" src="http://www.cppblog.com/images/cppblog_com/huyutian/o_gma_5.jpg" width=751 border=0></p>
<p>&nbsp;<br>Command栏位填入：$(SolutionDir)\Bin\$(ConfigurationName)\$(TargetFileName)<br>Working Directory栏位填入：$(SolutionDir)\Bin\$(ConfigurationName)\<br>&nbsp;<br>这样就大功告成了，现在你就可以编译该执行程序并进行调试。</p>
<p>补充1：<br></p>
<dd>各位兄弟们，那个copy的问题我终于解决了，原来当目标路径的文件夹不存在时，copy命令就不好用了，提示系统找不到指定的路径。，把这句话：<br>copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;<br>换成以下这句就OK了&#8230;&#8230;<br>xcopy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\<br>注意，命令变成了xcopy了，而且最后的分号去掉啦，之后即使Bin目录下没有Debug或Release目录编译器也会自动生成的！~</dd>
<p>补充2：<br>避免下次编译覆盖文件提示加个&#8220;/y&#8221; 参数，具体修改如下：<br>xcopy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\ /y<br>这回就OK了，如果目标文件正在被使用中的话，会提示&#8220;共享侵犯&#8221;哦！~<br><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/rogeryi/archive/2007/01/13/1481923.aspx">http://blog.csdn.net/rogeryi/archive/2007/01/13/1481923.aspx</a></p>
<img src ="http://www.cppblog.com/huyutian/aggbug/123630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-08-16 22:25 <a href="http://www.cppblog.com/huyutian/articles/123630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴:STL之vector用法小结</title><link>http://www.cppblog.com/huyutian/articles/107461.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sun, 07 Feb 2010 16:00:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/107461.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/107461.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/107461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/107461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/107461.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_174_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_174_Open_Text.style.display='none'; Codehighlighter1_0_174_Closed_Image.style.display='inline'; Codehighlighter1_0_174_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_174_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_174_Closed_Text.style.display='none'; Codehighlighter1_0_174_Open_Image.style.display='inline'; Codehighlighter1_0_174_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_174_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_174_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Vector:&nbsp;它就是数组的一个泛化推广，&nbsp;等同于数组，它拥有一段连续的内存空间，并且起始地址不变，<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>优点：1）很好的支持随机存取，即[]操作符，查询操作高效<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>缺点：1）插入/删除会造成内存块的拷贝，效率较低,（尾部元素除外）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;2）内存空间不够时，需要重新申请一块足够大的内存并进行内存的拷贝，大大影响了vector的效率<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;printVector(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;v1)<br><img id=Codehighlighter1_291_1025_Open_Image onclick="this.style.display='none'; Codehighlighter1_291_1025_Open_Text.style.display='none'; Codehighlighter1_291_1025_Closed_Image.style.display='inline'; Codehighlighter1_291_1025_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_291_1025_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_291_1025_Closed_Text.style.display='none'; Codehighlighter1_291_1025_Open_Image.style.display='inline'; Codehighlighter1_291_1025_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_291_1025_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_291_1025_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用下标方式<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">for&nbsp;(unsigned&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;v1.size();&nbsp;i++)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;cout&lt;&lt;"v1["&lt;&lt;i&lt;&lt;"]&nbsp;=&nbsp;"&lt;&lt;v1[i]&lt;&lt;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用迭代器<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">vector&lt;int&gt;::iterator&nbsp;iter;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">for&nbsp;(iter&nbsp;=&nbsp;v1.begin();&nbsp;iter&nbsp;!=&nbsp;v1.end();&nbsp;iter++)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;"v1["&lt;&lt;iter-v1.begin()&lt;&lt;"]&nbsp;=&nbsp;"&lt;&lt;*iter&lt;&lt;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;cout&lt;&lt;"v1["&lt;&lt;iter-v1.begin()&lt;&lt;"]"&lt;&lt;"="&lt;&lt;*iter&lt;&lt;",&nbsp;";<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&lt;&lt;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用迭代器指针<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">vector&lt;int&gt;::iterator&nbsp;*pIter;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Error，迭代器指针需要分配内存才能使用，<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">或者通俗的说pIter未实现时，*pIter是不确定的，运行时对其赋值必须会发生异常</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">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;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&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;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(NULL&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;pIter)<br><img id=Codehighlighter1_825_838_Open_Image onclick="this.style.display='none'; Codehighlighter1_825_838_Open_Text.style.display='none'; Codehighlighter1_825_838_Closed_Image.style.display='inline'; Codehighlighter1_825_838_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_825_838_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_825_838_Closed_Text.style.display='none'; Codehighlighter1_825_838_Open_Image.style.display='inline'; Codehighlighter1_825_838_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_825_838_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_825_838_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;v1.begin();&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIter&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;v1.end();&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIter)</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">此处若写成*pIter++是不对的，因为++优化级别较高</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_928_954_Open_Image onclick="this.style.display='none'; Codehighlighter1_928_954_Open_Text.style.display='none'; Codehighlighter1_928_954_Closed_Image.style.display='inline'; Codehighlighter1_928_954_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_928_954_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_928_954_Closed_Text.style.display='none'; Codehighlighter1_928_954_Open_Image.style.display='inline'; Codehighlighter1_928_954_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_928_954_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_928_954_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;**</span><span style="COLOR: #000000">pIter</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(NULL&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;pIter)<br><img id=Codehighlighter1_975_1011_Open_Image onclick="this.style.display='none'; Codehighlighter1_975_1011_Open_Text.style.display='none'; Codehighlighter1_975_1011_Closed_Image.style.display='inline'; Codehighlighter1_975_1011_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_975_1011_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_975_1011_Closed_Text.style.display='none'; Codehighlighter1_975_1011_Open_Image.style.display='inline'; Codehighlighter1_975_1011_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_975_1011_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_975_1011_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;delete&nbsp;pIter;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;pIter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;reversePrintVector(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;vec)<br><img id=Codehighlighter1_1069_1248_Open_Image onclick="this.style.display='none'; Codehighlighter1_1069_1248_Open_Text.style.display='none'; Codehighlighter1_1069_1248_Closed_Image.style.display='inline'; Codehighlighter1_1069_1248_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1069_1248_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1069_1248_Closed_Text.style.display='none'; Codehighlighter1_1069_1248_Open_Image.style.display='inline'; Codehighlighter1_1069_1248_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1069_1248_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1069_1248_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::reverse_iterator&nbsp;revIter;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(revIter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;vec.rbegin();&nbsp;revIter&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;vec.rend();&nbsp;revIter</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1173_1234_Open_Image onclick="this.style.display='none'; Codehighlighter1_1173_1234_Open_Text.style.display='none'; Codehighlighter1_1173_1234_Closed_Image.style.display='inline'; Codehighlighter1_1173_1234_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1173_1234_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1173_1234_Closed_Text.style.display='none'; Codehighlighter1_1173_1234_Open_Image.style.display='inline'; Codehighlighter1_1173_1234_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_1173_1234_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1173_1234_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">v[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">revIter</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">vec.rbegin()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">revIter</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_1261_2815_Open_Image onclick="this.style.display='none'; Codehighlighter1_1261_2815_Open_Text.style.display='none'; Codehighlighter1_1261_2815_Closed_Image.style.display='inline'; Codehighlighter1_1261_2815_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1261_2815_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1261_2815_Closed_Text.style.display='none'; Codehighlighter1_1261_2815_Open_Image.style.display='inline'; Codehighlighter1_1261_2815_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1261_2815_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1261_2815_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">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;v1;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建空的vector对象</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">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;v2(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建具有10个元素的vector对象</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;v3(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">9.1</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建具有10个元素的vector对象，每个元素的值为9.1</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;v4(v3);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">通过拷贝一个V3对象的各个元素值，创建一个新的vector对象</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1472_1492_Open_Image onclick="this.style.display='none'; Codehighlighter1_1472_1492_Open_Text.style.display='none'; Codehighlighter1_1472_1492_Closed_Image.style.display='inline'; Codehighlighter1_1472_1492_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1472_1492_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1472_1492_Closed_Text.style.display='none'; Codehighlighter1_1472_1492_Open_Image.style.display='inline'; Codehighlighter1_1472_1492_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;iArray[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1472_1492_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1472_1492_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">&nbsp;,&nbsp;</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">23</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">27</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>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(iArray,&nbsp;iArray&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">通过拷贝迭代器区间[first,&nbsp;end)的元素值，创建新的vector对象<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化----用push_back，在容器的尾端插入新元素</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">v1.push_back(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>v1.push_back(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>v1.push_back(</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">遍历访问:1-下标方式（略）<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">遍历访问之2:迭代器方式,&nbsp;建议使用此方式并熟练应用之</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">printVector(v1):&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printVector(v1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">反向遍历之迭代器方式</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">reversePrintVector(v1):</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>reversePrintVector(v1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">插入元素：用insert(&amp;pos,&nbsp;elem)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">v1.insert(v1.begin()&nbsp;+&nbsp;1,&nbsp;100)：&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>v1.insert(v1.begin()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printVector(v1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">删除元素:&nbsp;尾部元素删除用pop_back()；单个元素删除用erase(&amp;pos)；<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">[first,&nbsp;last)区间元素删除用erase(&amp;first,&nbsp;&amp;last);&nbsp;整体删除用clear();</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">v1.erase(v1.begin()&nbsp;+&nbsp;1):&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>v1.erase(v1.begin()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printVector(v1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">v1.pop_back():</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>v1.pop_back();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printVector(v1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">查找函数:由外部算法提供</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">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;iter;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">find(v1.begin(),&nbsp;v1.end(),&nbsp;2)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>iter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;find(v1.begin(),&nbsp;v1.end(),&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(iter&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;v1.end())<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">find&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">iter</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;at&nbsp;index:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">iter</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">v1.begin()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">not&nbsp;find</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">v1.empty()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">v1.empty()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">其它:\nv1.empty()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">v1.empty()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;v1.size()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">v1.size()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;v1.max_size()&nbsp;=(hex)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">hex</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">v1.max_size()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">head-elem=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">dec</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">v1.front()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tail-elem=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">v1.back()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">清空</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">v1.clear()&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>v1.clear();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">v1.size()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">v1.size()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;v1.empty()=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">v1.empty()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_2819_2915_Open_Image onclick="this.style.display='none'; Codehighlighter1_2819_2915_Open_Text.style.display='none'; Codehighlighter1_2819_2915_Closed_Image.style.display='inline'; Codehighlighter1_2819_2915_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_2819_2915_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2819_2915_Closed_Text.style.display='none'; Codehighlighter1_2819_2915_Open_Image.style.display='inline'; Codehighlighter1_2819_2915_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_2819_2915_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_2819_2915_Open_Text><span style="COLOR: #808080">////////////////////////////////////</span><span style="COLOR: #008000">运行结果</span><span style="COLOR: #808080">//////////////////////////////////////////////////////</span><span style="COLOR: #008000">//</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">printVector(v1):<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>reversePrintVector(v1):<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>v[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">,&nbsp;v[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,&nbsp;v[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>v1.insert(v1.begin()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">)：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>v1.erase(v1.begin()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">):<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>v1.pop_back():<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>find(v1.begin(),&nbsp;v1.end(),&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>find&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;at&nbsp;index:&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>v1.empty()&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 src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>其它:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>v1.empty()&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;v1.size()&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,&nbsp;v1.max_size()&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(hex)3fffffff<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>head</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">elem</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>tail</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">elem</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>v1.clear()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>v1.size()&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;v1.empty()</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/huyutian/aggbug/107461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-02-08 00:00 <a href="http://www.cppblog.com/huyutian/articles/107461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴:STL之list之用法小结</title><link>http://www.cppblog.com/huyutian/articles/107460.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sun, 07 Feb 2010 15:59:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/107460.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/107460.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/107460.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/107460.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/107460.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: /**//*list:&nbsp;等同于双向链表，内存空间可以是不连续的，通过指针来进行数据的访问&nbsp;&nbsp;&nbsp;优:&nbsp;1)插入/删除效率高&nbsp;&nbsp;&nbsp;缺:&nbsp;1)不支持随机存取，查询效率较低*/#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;string&gt;#include&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/huyutian/articles/107460.html'>阅读全文</a><img src ="http://www.cppblog.com/huyutian/aggbug/107460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-02-07 23:59 <a href="http://www.cppblog.com/huyutian/articles/107460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴:STL之Deque使用小结</title><link>http://www.cppblog.com/huyutian/articles/107459.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sun, 07 Feb 2010 15:58:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/107459.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/107459.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/107459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/107459.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/107459.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_282_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_282_Open_Text.style.display='none'; Codehighlighter1_0_282_Closed_Image.style.display='inline'; Codehighlighter1_0_282_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_282_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_282_Closed_Text.style.display='none'; Codehighlighter1_0_282_Open_Image.style.display='inline'; Codehighlighter1_0_282_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_282_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_282_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">deque:&nbsp;是一个double-ended&nbsp;queue,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;1)支持随即存取，也就是[]操作符，<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;2)支持两端操作，push(pop)-back(front)，在两端操作上与list效率差不多<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;因此在实际使用时，如何选择这三个容器中哪一个，应根据你的需要而定，一般应遵循下面的原则：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;1、如果你需要高效的随即存取，而不在乎插入和删除的效率，使用vector&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;2、如果你需要大量的插入和删除，而不关心随即存取，则应使用list&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;3、如果你需要随即存取，而且关心两端数据的插入和删除，则应使用deque。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">deque</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;printDeque(deque</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;d)<br><img id=Codehighlighter1_374_912_Open_Image onclick="this.style.display='none'; Codehighlighter1_374_912_Open_Text.style.display='none'; Codehighlighter1_374_912_Closed_Image.style.display='inline'; Codehighlighter1_374_912_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_374_912_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_374_912_Closed_Text.style.display='none'; Codehighlighter1_374_912_Open_Image.style.display='inline'; Codehighlighter1_374_912_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_374_912_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_374_912_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用下标<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">for&nbsp;(unsigned&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;d.size();&nbsp;i++)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;cout&lt;&lt;"d["&lt;&lt;i&lt;&lt;"]&nbsp;=&nbsp;"&lt;&lt;d[i]&lt;&lt;",&nbsp;";<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用迭代器<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">deque&lt;int&gt;::iterator&nbsp;iter&nbsp;=&nbsp;d.begin();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">for&nbsp;(;iter&nbsp;!=&nbsp;d.end();&nbsp;iter&nbsp;++)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;cout&lt;&lt;"d["&lt;&lt;iter-d.begin()&lt;&lt;"]&nbsp;=&nbsp;"&lt;&lt;(*iter)&lt;&lt;",&nbsp;";<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用迭代器指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">deque</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;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;deque</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::iterator;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;NULL&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;pIter&nbsp;)<br><img id=Codehighlighter1_709_723_Open_Image onclick="this.style.display='none'; Codehighlighter1_709_723_Open_Text.style.display='none'; Codehighlighter1_709_723_Closed_Image.style.display='inline'; Codehighlighter1_709_723_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_709_723_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_709_723_Closed_Text.style.display='none'; Codehighlighter1_709_723_Open_Image.style.display='inline'; Codehighlighter1_709_723_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_709_723_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_709_723_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;d.begin();&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIter&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;d.end();&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pIter)</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_781_840_Open_Image onclick="this.style.display='none'; Codehighlighter1_781_840_Open_Text.style.display='none'; Codehighlighter1_781_840_Closed_Image.style.display='inline'; Codehighlighter1_781_840_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_781_840_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_781_840_Closed_Text.style.display='none'; Codehighlighter1_781_840_Open_Image.style.display='inline'; Codehighlighter1_781_840_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_781_840_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_781_840_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">pIter&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;d.begin()&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">]=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;**</span><span style="COLOR: #000000">pIter</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(NULL&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;pIter)<br><img id=Codehighlighter1_861_897_Open_Image onclick="this.style.display='none'; Codehighlighter1_861_897_Open_Text.style.display='none'; Codehighlighter1_861_897_Closed_Image.style.display='inline'; Codehighlighter1_861_897_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_861_897_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_861_897_Closed_Text.style.display='none'; Codehighlighter1_861_897_Open_Image.style.display='inline'; Codehighlighter1_861_897_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_861_897_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_861_897_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;delete&nbsp;pIter;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;pIter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_927_2811_Open_Image onclick="this.style.display='none'; Codehighlighter1_927_2811_Open_Text.style.display='none'; Codehighlighter1_927_2811_Closed_Image.style.display='inline'; Codehighlighter1_927_2811_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_927_2811_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_927_2811_Closed_Text.style.display='none'; Codehighlighter1_927_2811_Open_Image.style.display='inline'; Codehighlighter1_927_2811_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_927_2811_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_927_2811_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建deque</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">deque</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;d1;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建一个没有任何元素的deque对象</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">deque</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;d2(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建一个具有10个元素的deque对象，每个元素值为默认</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">deque</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;d3(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">5.5</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">伊妹一个具有10个元素的deque对象,每个元素的初始值为5.5</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">deque</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;d4(d3);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">通过拷贝一个deque对象的元素值,&nbsp;创建一个新的deque对象</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1158_1177_Open_Image onclick="this.style.display='none'; Codehighlighter1_1158_1177_Open_Text.style.display='none'; Codehighlighter1_1158_1177_Closed_Image.style.display='inline'; Codehighlighter1_1158_1177_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1158_1177_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1158_1177_Closed_Text.style.display='none'; Codehighlighter1_1158_1177_Open_Image.style.display='inline'; Codehighlighter1_1158_1177_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;iArray[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1158_1177_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1158_1177_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">23</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">27</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>deque</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;d5(iArray,&nbsp;iArray</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将迭代器区间[first,&nbsp;last)所指的元素拷贝到一个新创建的deque对象中<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化赋值：同vector一样,使用尾部插入函数push_back()</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</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">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">&nbsp;;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;d1.push_back(i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">遍历元素:&nbsp;1-下标方式&nbsp;2-迭代器方式&nbsp;反向遍历（略）</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">printDeque(d1)&nbsp;:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printDeque(d1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">元素插入：尾部插入用push_back()，头部插入用push_front()，其它位置插入用insert(&amp;pos,&nbsp;elem)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.push_front(100):&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>d1.push_front(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printDeque(d1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.insert(d1.begin()+3,&nbsp;200):&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">支持随机存取(即[]操作符)，所以begin()可以+3</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">d1.insert(d1.begin()</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printDeque(d1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">元素删除&nbsp;尾部删除用pop_back();头部删除用pop_front();&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">任意迭代位置或迭代区间上的元素删除用erase(&amp;pos)/erase(&amp;first,&nbsp;&amp;last)；删除所有元素用clear();</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.pop_front():&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>d1.pop_front();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printDeque(d1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.erase(d1.begin()+1):&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>d1.erase(d1.begin()</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">删除第2个元素d1[1]</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">printDeque(d1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.erase(d1.begin(),&nbsp;d1.begin()&nbsp;+&nbsp;2)&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>d1.erase(d1.begin(),&nbsp;d1.begin()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printDeque(d1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.clear()&nbsp;:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>d1.clear();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printDeque(d1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">其它常用</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">其它常用用法:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;flag&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 src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(flag&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_2192_2682_Open_Image onclick="this.style.display='none'; Codehighlighter1_2192_2682_Open_Text.style.display='none'; Codehighlighter1_2192_2682_Closed_Image.style.display='inline'; Codehighlighter1_2192_2682_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2192_2682_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2192_2682_Closed_Text.style.display='none'; Codehighlighter1_2192_2682_Open_Image.style.display='inline'; Codehighlighter1_2192_2682_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_2192_2682_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2192_2682_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;flag&nbsp;)<br><img id=Codehighlighter1_2216_2284_Open_Image onclick="this.style.display='none'; Codehighlighter1_2216_2284_Open_Text.style.display='none'; Codehighlighter1_2216_2284_Closed_Image.style.display='inline'; Codehighlighter1_2216_2284_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2216_2284_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2216_2284_Closed_Text.style.display='none'; Codehighlighter1_2216_2284_Open_Image.style.display='inline'; Codehighlighter1_2216_2284_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2216_2284_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2216_2284_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</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">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">&nbsp;;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">恢复</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d1.push_back(i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_2297_2404_Open_Image onclick="this.style.display='none'; Codehighlighter1_2297_2404_Open_Text.style.display='none'; Codehighlighter1_2297_2404_Closed_Image.style.display='inline'; Codehighlighter1_2297_2404_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2297_2404_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2297_2404_Closed_Text.style.display='none'; Codehighlighter1_2297_2404_Open_Image.style.display='inline'; Codehighlighter1_2297_2404_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2297_2404_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2297_2404_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d1.clear();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">after&nbsp;d1.clear()&nbsp;,&nbsp;d1.front(),&nbsp;d1.back()&nbsp;is&nbsp;abnormal!&nbsp;other&nbsp;info.:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.empty()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">d1.empty()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.size()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">d1.size()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.max_size()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">hex</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">d1.max_size()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">d1.empty())<br><img id=Codehighlighter1_2570_2663_Open_Image onclick="this.style.display='none'; Codehighlighter1_2570_2663_Open_Text.style.display='none'; Codehighlighter1_2570_2663_Closed_Image.style.display='inline'; Codehighlighter1_2570_2663_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2570_2663_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2570_2663_Closed_Text.style.display='none'; Codehighlighter1_2570_2663_Open_Image.style.display='inline'; Codehighlighter1_2570_2663_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2570_2663_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2570_2663_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.front()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">d1.front()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.back()&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">d1.back()</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;flag</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">交换</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1.swap(d5)=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>d1.swap(d5);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d1&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printDeque(d1);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d5&nbsp;=&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>printDeque(d5);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">printDeque(d)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/huyutian/aggbug/107459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-02-07 23:58 <a href="http://www.cppblog.com/huyutian/articles/107459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴:STL之MAP使用小结</title><link>http://www.cppblog.com/huyutian/articles/107458.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sun, 07 Feb 2010 15:57:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/107458.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/107458.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/107458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/107458.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/107458.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: /**//*自动建立Key&nbsp;－&nbsp;value的对应。key&nbsp;和&nbsp;value可以是任意你需要的类型。&nbsp;根据key值快速查找记录，查找的复杂度基本是Log(N)，如果有1000个记录，最多查找10次，1,000,000个记录，最多查找20次。&nbsp;快速插入Key&nbsp;-&nbsp;Value&nbsp;记录。&nbsp;快速删除记录&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/huyutian/articles/107458.html'>阅读全文</a><img src ="http://www.cppblog.com/huyutian/aggbug/107458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-02-07 23:57 <a href="http://www.cppblog.com/huyutian/articles/107458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴:STL之set使用方法小结</title><link>http://www.cppblog.com/huyutian/articles/107457.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sun, 07 Feb 2010 15:55:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/107457.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/107457.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/107457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/107457.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/107457.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;/**//*set/multiset会根据待定的排序准则，自动将元素排序。两者不同在于前者不允许元素重复，而后者允许。1)&nbsp;不能直接改变元素值，因为那样会打乱原本正确的顺序，要改变元素值必须先删除旧元素，则插入新元素2)&nbsp;不提供直接存取元素的任何操作函数，只能通过迭代器进行间接存取，而且从迭代器角度来看，元素值是常数3)&nbsp;元素比较动作只能用于型别相同的...&nbsp;&nbsp;<a href='http://www.cppblog.com/huyutian/articles/107457.html'>阅读全文</a><img src ="http://www.cppblog.com/huyutian/aggbug/107457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-02-07 23:55 <a href="http://www.cppblog.com/huyutian/articles/107457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用成员函数、友元函数方式重载运算符的区别</title><link>http://www.cppblog.com/huyutian/articles/106643.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Thu, 28 Jan 2010 08:11:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/106643.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/106643.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/106643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/106643.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/106643.html</trackback:ping><description><![CDATA[以前一直没太搞明白，C++书上在重载运算符时，有的使用友元函数，有的使用成员函数有何区别，但自己的程序中需要重载运算符的时候较少，所以也没往心里去。<br>最近写一个程序需要用到C++的函数lower_bound,binary_search进行有序队列的查找。函数有一个参数需要调用比较函数。我就使用成员函数重载了operator &gt;,结果编译报错。检查了半天也没找到问题，为什么已经重载了比较运算符，还报错。然后在网上搜索了一番，终于搞明白了。<br>bool operator &lt; (const MyClass &amp;rhs);<br>在调用时实际上是this-&gt;(operator &lt;)(&amp;rhs);这个与lower_bound要求的比较函数的两个参数都要是对象引用不相符，导致编译错误。<br>修改为友元函数就ok了。<br>friend bool operator &lt; (const MyClass &amp;lhs, const MyClass &amp;rhs);<br><br>其实重载运算符是使用友元函数，还是成员函数，有相当多讲究的。<br>可以看看redsnow的下面这篇文章.但这里主要是根据自己实际中遇到和解决问题的一点体会来写的。<br><font style="font-size: 14pt;" color="#02368d"><strong></strong></font><a  href="http://blog.chinaunix.net/u/24250/showart_182419.html"><font style="font-size: 14pt;" color="#02368d"><strong>C++的class的operator定义为friend
function讨论</strong></font></a><br> <img src ="http://www.cppblog.com/huyutian/aggbug/106643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-01-28 16:11 <a href="http://www.cppblog.com/huyutian/articles/106643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从查找一次内存泄漏学到的...</title><link>http://www.cppblog.com/huyutian/articles/106467.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Tue, 26 Jan 2010 06:57:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/106467.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/106467.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/106467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/106467.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/106467.html</trackback:ping><description><![CDATA[最近写一个程序时，出现了内存泄漏问题。然后到网上搜索了一下，发现了一个简单易用的开源内存泄漏检测工具Visual Leak Detector (VLD) ，在visual c++上工作的很好，其他环境尚未研究。源代码、安装文件可以从codeproject下载,目前最新版本是v1.9b。<br>先说说这个工具的使用。安装完毕，在需要调试的项目中加入把Visual Leak Detector 的Include目录和LIB目录添加到项目的路径中去。再在需要监视的cpp文件头中加入#include &lt;vld.h&gt;，如果是MFC程序，就可以直接在stdafx.h的最后面加上这一句。剩下的就是运行调试程序，在output窗口察看结果了。<br>我的错误信息如下。<br>---------- Block 251168 at 0x00FE9998: 16 bytes ----------<br>&nbsp; Call Stack:<br>&nbsp;&nbsp;&nbsp; c:\program files\microsoft visual studio .net 2003\vc7\include\xmemory (34): std::_Allocate&lt;char&gt;<br>&nbsp;&nbsp;&nbsp; c:\program files\microsoft visual studio .net 2003\vc7\include\xmemory (137): std::allocator&lt;char&gt;::allocate<br>&nbsp;&nbsp;&nbsp; c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (1454): std::basic_string&lt;char,std::char_traits&lt;char&gt;,std::allocator&lt;char&gt; &gt;::_Copy<br>&nbsp;&nbsp;&nbsp; c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (1485): std::basic_string&lt;char,std::char_traits&lt;char&gt;,std::allocator&lt;char&gt; &gt;::_Grow<br>&nbsp;&nbsp;&nbsp; c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (612): std::basic_string&lt;char,std::char_traits&lt;char&gt;,std::allocator&lt;char&gt; &gt;::assign<br>&nbsp;&nbsp;&nbsp; c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (623): std::basic_string&lt;char,std::char_traits&lt;char&gt;,std::allocator&lt;char&gt; &gt;::assign<br>&nbsp;&nbsp;&nbsp; c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (473): std::basic_string&lt;char,std::char_traits&lt;char&gt;,std::allocator&lt;char&gt; &gt;::operator=<br>&nbsp;&nbsp;&nbsp; d:\projects\client\quoteclient\tradetransaction.cpp (2143): CTradeTransaction::AnsReadTodayOrder<br>&nbsp;&nbsp;&nbsp; d:\projects\client\quoteclient\tradetransaction.cpp (2694): CTradeTransaction::ProcessAllReq<br>&nbsp;&nbsp;&nbsp; d:\projects\client\quoteclient\tradesocket.cpp (93): CTradeSocket::ReceivePacket<br>&nbsp;&nbsp;&nbsp; d:\projects\client\quoteclient\tradethread.cpp (146): CTradeThread::RunWorkerInternal<br>&nbsp;&nbsp;&nbsp; d:\projects\client\quoteclient\tradethread.cpp (97): CTradeThread::WorkerThreadProc<br>&nbsp;&nbsp;&nbsp; f:\vs70builds\3077\vc\crtbld\crt\src\threadex.c (241): _threadstartex<br>&nbsp;&nbsp;&nbsp; 0x7C80B729 (File and line number not available): GetModuleFileNameA<br>&nbsp; Data:<br>&nbsp;&nbsp;&nbsp; CD CD CD CD&nbsp;&nbsp;&nbsp; CD CD CD CD&nbsp;&nbsp;&nbsp; CD CD CD CD&nbsp;&nbsp;&nbsp; CD CD CD CD&nbsp;&nbsp;&nbsp;&nbsp; ........ ........<br>点击内存泄漏条目可以定位到某一行源代码，可以看出主要是使用std::string不当造成的内存泄漏。<br>进一步分析发现是由于对某个结构体的成员变量std::string误使用了memset初始化造成的。<br>struct tag_myStruct<br>{<br>std::string id;<br>int value;<br>}<br>总结一下，在c语言中，结构体的初始化，是可以直接memset(pStruct, 0,&nbsp; sizeof(tag_myStruct));<br>但在c++中必须小心，比如上面的结构实际上就是一个类了，习惯性的用memset就会出错。为防止这种惯性思维，建议将所有复杂结构直接用class来申明.然后定义缺省构造函数。否则将来使用时一不小心，就可能造成不测。<br><br>补充：尽量不要在C++程序中使用C风格的代码。但这个是需要一些时间来调整的。
<img src ="http://www.cppblog.com/huyutian/aggbug/106467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2010-01-26 14:57 <a href="http://www.cppblog.com/huyutian/articles/106467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于IDA使用的几个技巧（收集）</title><link>http://www.cppblog.com/huyutian/articles/102223.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Sun, 29 Nov 2009 04:42:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/102223.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/102223.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/102223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/102223.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/102223.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.IDA反编译生成c代码时，有时会出现sp-analysis failed错误。这一般是由于IDA分析某个外部函数call时出现了堆栈指针调整错误。可以先设置菜单option-&gt;General-&gt;Disassembly选中stack pointer.然后逐行看看哪些调用前后堆栈出现了偏差。2.IDA可以通过定义struct/enum来增强生成C代码的可读性。但有时候在分析一个程序时定...&nbsp;&nbsp;<a href='http://www.cppblog.com/huyutian/articles/102223.html'>阅读全文</a><img src ="http://www.cppblog.com/huyutian/aggbug/102223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2009-11-29 12:42 <a href="http://www.cppblog.com/huyutian/articles/102223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于编程中数据存储格式的选择</title><link>http://www.cppblog.com/huyutian/articles/100897.html</link><dc:creator>胡雨田</dc:creator><author>胡雨田</author><pubDate>Fri, 13 Nov 2009 14:06:00 GMT</pubDate><guid>http://www.cppblog.com/huyutian/articles/100897.html</guid><wfw:comment>http://www.cppblog.com/huyutian/comments/100897.html</wfw:comment><comments>http://www.cppblog.com/huyutian/articles/100897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/huyutian/comments/commentRss/100897.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/huyutian/services/trackbacks/100897.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以前一直想当然认为在数据的存储方面，必定是int最快，float和double要慢得多。最近在写一个股票相关的软件时，考虑股票数据的存储效率问题，做了一个简单的测试，结果让我很吃惊。<br>1.数据统一采用float或者double要比混合采用float和double要快大约10%-20%<br>2.用__int64存储要比float或double都要慢，我想大概是由于我用的是32位处理器的原因，__int64是拼接而成的。<br>3.全部选用float与全部选用double处理速度相当，但好像double要稍快一些。<br>以上是在我自己电脑上跑自编程序测试的，条件有限不一定准确，但应该能说明一些问题。所以我认为股票相关数据的存储在不考虑存储空间限制的情况下，可以尽量用double类型，精度较高，速度也不满。<br>
<img src ="http://www.cppblog.com/huyutian/aggbug/100897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/huyutian/" target="_blank">胡雨田</a> 2009-11-13 22:06 <a href="http://www.cppblog.com/huyutian/articles/100897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>