<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>迷途知返 &#187; C/C++</title>
	<atom:link href="http://pwwang.com/tag/c-c-plus-plus/feed/" rel="self" type="application/rss+xml" />
	<link>http://pwwang.com</link>
	<description>专注技术,用心生活!</description>
	<lastBuildDate>Fri, 11 Nov 2011 11:29:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>国外的C语言考题－“21减”游戏</title>
		<link>http://pwwang.com/2009/12/10/foreign_c_test_21_minus/</link>
		<comments>http://pwwang.com/2009/12/10/foreign_c_test_21_minus/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 02:45:58 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=855</guid>
		<description><![CDATA[&#160;

模拟一个&#8221;21 减&#8221;的游戏。这个游戏在开始时的上限值为21，并且经过很多回合。在一个回合中抓阄，所抓的每个阄上可以写任何一个正数，并且把这些值相加，直到您最少有16点。从这个点数您可以结束一个回合。

如果点数大于当前的上限值，您就输掉了当前的回合。点数正好符合上线数，则对于下一个回合而言，其上限减少1，否则存在不分胜负。一旦上限值变为19，则游戏被中断。

<span class="readmore"><a href="http://pwwang.com/2009/12/10/foreign_c_test_21_minus/" title="国外的C语言考题－“21减”游戏">Read More: 1195 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<div>&nbsp;</div>
<div>模拟一个&rdquo;21 减&rdquo;的游戏。这个游戏在开始时的上限值为21，并且经过很多回合。在一个回合中抓阄，所抓的每个阄上可以写任何一个正数，并且把这些值相加，直到您最少有16点。从这个点数您可以结束一个回合。</div>
<div>如果点数大于当前的上限值，您就输掉了当前的回合。点数正好符合上线数，则对于下一个回合而言，其上限减少1，否则存在不分胜负。一旦上限值变为19，则游戏被中断。</div>
<div>&nbsp;</div>
<div><b><u>必要条件：</u></b></div>
<div><b><u>&nbsp;</u></b></div>
<div>写一个子程序 int loseZiehen(int obergrenze) &ndash; 使用的输入控制子程序中的变量 obergrenze(上限值)，并且返回抓过的阄上的数字的总和。在主程序中，一个新回合被开始，或者上限值被降低。</div>
<div>&nbsp;</div>
<div><b>程序运行举例：</b></div>
<div><b>&nbsp;</b></div>
<div>上限值是 21</div>
<div>到现在0 点 <span>&ndash; </span>新抓得的数? <b>19 </b></div>
<div>到现在19 点 <span>&ndash; </span>还要抓一次 (JA = 1 / NO = 0)? <b>1 </b></div>
<div>到现在19 点 <span>&ndash; </span>新抓得得值？<b>1 </b></div>
<div>到现在20 点 <span>&ndash;</span>还要抓一次 (JA = 1 / NO = 0)? <b>0</b></div>
<div>&nbsp;</div>
<div>不分胜负 &#8211; 上限值是 21</div>
<div>到现在0 点 <span>&ndash; </span>新抓得的数? <b>22 </b></div>
<div>&nbsp;</div>
<div>输了 &#8211; 上限值是 21</div>
<div>到现在0 点 <span>&ndash; </span>新抓得的数? <b>12 </b></div>
<div>到现在12 点 <span>&ndash; </span>新抓得得值？<b>9</b></div>
<div>&nbsp;</div>
<div>赢了 -上限值是 20</div>
<div>到现在0 点 <span>&ndash; </span>新抓得的数? <b>20</b></div>
<div><b>&nbsp;</b></div>
<div>赢了 -上限值是 19</div>
<div>游戏结束！</div>
<div><span id="more-855"></span></div>
<div>代码：</div>
<div>&nbsp;</div>
<div>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> loseZiehen<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> obergrenze<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> point <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//现在的点数 </span>
    <span style="color: #993333;">int</span> again <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//再抓一次?</span>
    <span style="color: #b1b100;">do</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> point <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">16</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>point <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">16</span> <span style="color: #339933;">&amp;&amp;</span> again<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #993333;">int</span> r <span style="color: #339933;">=</span> rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span><span style="color:#800080;">30</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// % 防止产生的随机数太大 </span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;到现在 %d 点 - 新抓到的数? %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>point<span style="color: #339933;">,</span>r<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            point <span style="color: #339933;">+=</span> r<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> point <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">16</span> <span style="color: #339933;">&amp;&amp;</span> point <span style="color: #339933;">&lt;</span> obergrenze <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;到现在 %d 点 - 还要抓一次(JA=1/NO=0)? &quot;</span><span style="color: #339933;">,</span>point<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>again<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> again <span style="color: #339933;">&amp;&amp;</span> point <span style="color: #339933;">&lt;</span> obergrenze <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #b1b100;">return</span> point<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    srand<span style="color: #009900;">&#40;</span>time<span style="color: #009900;">&#40;</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> obergrenze <span style="color: #339933;">=</span> <span style="color: #0000dd;">21</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> points <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> 
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;上限值是 21<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">do</span><span style="color: #009900;">&#123;</span>
        points <span style="color: #339933;">=</span> loseZiehen<span style="color: #009900;">&#40;</span>obergrenze<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//一轮的点数 </span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>points <span style="color: #339933;">==</span> obergrenze<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            obergrenze <span style="color: #339933;">--;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;赢了 - &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%s - &quot;</span><span style="color: #339933;">,</span> points<span style="color: #339933;">&gt;</span>obergrenze<span style="color: #339933;">?</span><span style="color: #ff0000;">&quot;输了&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;不分胜负&quot;</span> <span style="color: #009900;">&#41;</span>    <span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;上限值是 %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> obergrenze<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>obergrenze<span style="color: #339933;">!=</span><span style="color: #0000dd;">19</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;游戏结束!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
    system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pause&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</div>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/12/10/foreign_c_test_21_minus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>国外的C语言考题－滚梯</title>
		<link>http://pwwang.com/2009/11/13/foreign_c_tests_elevator/</link>
		<comments>http://pwwang.com/2009/11/13/foreign_c_tests_elevator/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 07:50:19 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=806</guid>
		<description><![CDATA[&#160;&#160;

写一个关于滚梯的程序：滚梯的台阶一个接一个的出现，人们可以站在滚梯的台阶上。

通过键盘登记在滚梯台阶上的人的数量。在滚梯台阶上的人数（#&#60;Anzahl&#62;），还有当前的新出现的滚梯台阶在每次的运行中被告知。在每个时刻只能看到此刻前5个滚梯台阶（及站在台阶上的人）。

<span class="readmore"><a href="http://pwwang.com/2009/11/13/foreign_c_tests_elevator/" title="国外的C语言考题－滚梯">Read More: 1209 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;</p>
<div>写一个关于滚梯的程序：滚梯的台阶一个接一个的出现，人们可以站在滚梯的台阶上。</div>
<div>通过键盘登记在滚梯台阶上的人的数量。在滚梯台阶上的人数（#&lt;Anzahl&gt;），还有当前的新出现的滚梯台阶在每次的运行中被告知。在每个时刻只能看到此刻前5个滚梯台阶（及站在台阶上的人）。</div>
<div>一旦输入一个负数，程序结束。</div>
<div>&nbsp;</div>
<div>提示：</div>
<div>编译程序，请您使用子程序 zustandTreppe 只输出或者读取下一个台阶的信息。在子程序中输入输出指令被使用。</div>
<div>例如：int person=zustandTreppe( &lt;台阶的阶数&gt;，人数，台阶数); 请在主程序中使用一个do循环。</div>
<div>&nbsp;</div>
<div><b>程序输出举例：</b></div>
<div><b>&nbsp;</b></div>
<div>0 0 0 0 0 &#8211; #0 &#8211; 1. 台阶? <b>1 </b></div>
<div>1 0 0 0 0 &#8211; #1 &#8211; 2. 台阶? <b>2 </b></div>
<div>2 1 0 0 0 &#8211; #3 &#8211; 3. 台阶? <b>0 </b></div>
<div>0 2 1 0 0 &#8211; #3 &#8211; 4. 台阶? <b>1 </b></div>
<div>1 0 2 1 0 &#8211; #4 &#8211; 5. 台阶? <b>0 </b></div>
<div>0 1 0 2 1 &#8211; #4 &#8211; 6. 台阶? <b>0 </b></div>
<div>0 0 1 0 2 &#8211; #3 &#8211; 7. 台阶? <b>3 </b></div>
<div>3 0 0 1 0 &#8211; #4 &#8211; 8. 台阶? <b>-1 </b></div>
<p><span id="more-806"></span>给出的答案:</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> rolltreppe<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span> personen<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> iteration<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d %d %d %d %d - # %d &amp;ndash;第 %d 个台阶: &quot;</span><span style="color: #339933;">,</span> 
        t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> personen<span style="color: #339933;">,</span> iteration<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> input<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//下一个台阶上将上来的人数</span>
    scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>input<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> input<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> personen<span style="color: #339933;">,</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> iter<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">do</span><span style="color: #009900;">&#123;</span>
        personen <span style="color: #339933;">=</span> rolltreppe<span style="color: #009900;">&#40;</span>t<span style="color: #339933;">,</span>t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span>t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span>t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span>t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span>t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> iter<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        iter<span style="color: #339933;">=</span>iter<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//记录滚动了多少次</span>
        t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
        t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
        t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
        t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> 
        t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> personen<span style="color: #339933;">;</span> 
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>personen <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>我写的代码:</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#define N 5</span>
&nbsp;
<span style="color: #993333;">int</span> rolltreppe<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> t<span style="color: #009900;">&#91;</span>N<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span> personen<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> iteration<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>N<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d &quot;</span><span style="color: #339933;">,</span> t<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;- # %d &amp;ndash;第 %d 个台阶: &quot;</span><span style="color: #339933;">,</span> personen<span style="color: #339933;">,</span> iteration<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> input<span style="color: #339933;">;</span>
    scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>input<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> input<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> personen<span style="color: #339933;">,</span> t<span style="color: #009900;">&#91;</span>N<span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> iter<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">,</span>total<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">do</span><span style="color: #009900;">&#123;</span>
        total <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>N<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span> total <span style="color: #339933;">+=</span> t<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        personen <span style="color: #339933;">=</span> rolltreppe<span style="color: #009900;">&#40;</span>t<span style="color: #339933;">,</span>total<span style="color: #339933;">,</span> iter<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        iter<span style="color: #339933;">=</span>iter<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> 
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> i<span style="color: #339933;">=</span>N<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">--</span> <span style="color: #009900;">&#41;</span> t<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> t<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        t<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> personen<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>personen <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
    system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pause&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/11/13/foreign_c_tests_elevator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>国外的C语言考题－二项式系数</title>
		<link>http://pwwang.com/2009/11/11/foreign_c_tests_binomial_coefficient/</link>
		<comments>http://pwwang.com/2009/11/11/foreign_c_tests_binomial_coefficient/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 16:48:02 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=801</guid>
		<description><![CDATA[&#160;

运用二项式系数您可以计算，要从n中选出k个元素一共有多少种可能性，例如：k=6，n=49您可以得出彩票抽奖可能的总数。二项式系数被定义如下：

(n,k)=n!/[(n-k)!k!]&#160; mit n&#8712;{0;1;2;&#8230;},0&#8804;k&#8804;n

<span class="readmore"><a href="http://pwwang.com/2009/11/11/foreign_c_tests_binomial_coefficient/" title="国外的C语言考题－二项式系数">Read More: 972 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<div>运用二项式系数您可以计算，要从n中选出k个元素一共有多少种可能性，例如：k=6，n=49您可以得出彩票抽奖可能的总数。二项式系数被定义如下：</div>
<div><span style="font-size: 15pt;">(n,k)=n!/[(n-k)!k!]&nbsp; mit n</span>&isin;<span>{0;1;2;&#8230;},0&le;k&le;n</span></div>
<div>&nbsp;</div>
<div><b>重要提示：</b></div>
<div>再次写一个函数<span> void fakultaet(int *n)；用于计算一个正整数的阶乘。继续写一个函数 int bino(int n,int k)；用于按照上面的公式计算二项式系数。请您在主函数中检验使用者输入的n和k。请注意，使用输入一定要满足0&le;k&le;n</span>，否则使用者必须重新输入。</div>
<div>程序输出如下：（使用输入用粗体字标出）</div>
<div>&nbsp;</div>
<div>请输入<span> n: <b>5</b></span></div>
<div>请输入<span> k: <b>3</b></span></div>
<div>二项式系数为<span>10</span></div>
<div>&nbsp;</div>
<div>请输入<span> n: <b>1</b></span></div>
<div>请输入<span> k: <b>4</b></span></div>
<div>错误的输入。请您输入<span>n: <b>4</b></span></div>
<div>请输入<span> k: 1</span></div>
<div>二项式系数为<span>4</span>&nbsp;</div>
<div><span id="more-801"></span></div>
<p class="MsoNormal"><span style="color: rgb(51, 153, 102);"><span style="font-family: 宋体;">此题是不是又是要用到引用调用呢？该怎么编译呢？</span></span><span style="font-family: 宋体; color: red;"><span lang="DE"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; color: red;">我先作一简单的分析。<span lang="DE"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; color: red;">这题的难点在于计算阶乘的那个函数。<span lang="DE"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; color: red;">这个函数规定没有返回值<span lang="DE"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; color: red;">那么计算得到的阶乘就必须存储在传递过来的指针所指的地址中<span lang="DE"><o:p></o:p></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; color: red;">而开始传递过来的参数事先已经存储在这个指针所指的地址中了。</span></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include&lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #993333;">void</span> fakultaet<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>n<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">//计算指针n指向的地址中的值的阶乘，并将结果存储到n所指向的地址中 </span>
    <span style="color: #993333;">int</span> num <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>n<span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// 从地址中把值取出来</span>
    <span style="color: #993333;">int</span> fac <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 存储计算的值</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//循环变量</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;=</span>num<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        fac <span style="color: #339933;">*=</span> i<span style="color: #339933;">;</span>    
    <span style="color: #009900;">&#125;</span>
    <span style="color: #339933;">*</span>n <span style="color: #339933;">=</span> fac<span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//再把计算得到的值存回指针所指的地址中 </span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> bino<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> n<span style="color: #339933;">,</span><span style="color: #993333;">int</span> k<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//按公式计算二项式系数 </span>
    <span style="color: #993333;">int</span> nk <span style="color: #339933;">=</span> n<span style="color: #339933;">-</span>k<span style="color: #339933;">;</span>
    fakultaet<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//分别计算几个数的阶乘并存到传递的指针所指的地址中 </span>
    fakultaet<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>k<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    fakultaet<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>nk<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #666666; font-style: italic;">// 这时候n,k,nk已经分别存储了他们的阶乘值 </span>
    <span style="color: #b1b100;">return</span> n <span style="color: #339933;">/</span> <span style="color: #009900;">&#40;</span> nk<span style="color: #339933;">*</span>k <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> n<span style="color: #339933;">,</span>k<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">do</span><span style="color: #009900;">&#123;</span>    
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;请输入n:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;请输入k:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>k<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>k<span style="color: #339933;">&gt;</span>n<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;错误的输入。<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>k<span style="color: #339933;">&gt;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//保证输入的k不比n大 </span>
&nbsp;
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;二项式系数为:%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> bino<span style="color: #009900;">&#40;</span>n<span style="color: #339933;">,</span>k<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pause&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;&nbsp; </p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/11/11/foreign_c_tests_binomial_coefficient/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>国外的C语言考题－自动售货机</title>
		<link>http://pwwang.com/2009/11/09/foreign_c_tests_autoseller/</link>
		<comments>http://pwwang.com/2009/11/09/foreign_c_tests_autoseller/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 02:39:12 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=797</guid>
		<description><![CDATA[&#160;

在德国的一个朋友给我发的一些题， 他是学机械的，C语言只是他们的公共基础课。

看看人家的要求吧。不能调试，程序运行必须通过。

<span class="readmore"><a href="http://pwwang.com/2009/11/09/foreign_c_tests_autoseller/" title="国外的C语言考题－自动售货机">Read More: 1096 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><span style="color: rgb(255, 102, 0);">在德国的一个朋友给我发的一些题， 他是学机械的，C语言只是他们的公共基础课。</span></p>
<p><span style="color: rgb(255, 102, 0);">看看人家的要求吧。不能调试，程序运行必须通过。</span></p>
<div>写一个模拟自动售货机的程序。首先通过价格选择一件物品并且投币付款。在售货机可以接收的只有5，20 和100 Cent 的硬币。错误的硬币被自动售货机识别，但是不改变将要支付的货品价格。投掷硬币，直到投币付清货品价格或是投多了。要付的金额，错误硬币的输入和多余的钱分别通过您的程序被输出。</div>
<div><b>重要提示：</b></div>
<div>请您使用子函数 int eingabe ()；在您的程序中既要确定物品的价格，又要确定要投掷的硬币。子函数本身不包含 printf &#8211; 指令，并且只返回使用者的输入。</div>
<div><b>举例：</b>（使用的输入用<b>粗体字</b>表示）</div>
<div>&nbsp;</div>
<div>请给出物品的价格：<b>211</b></div>
<div>您还有211 从 211 Cent中支付。请您投一个硬币：<b>100</b></div>
<div>您还有111 从 211 Cent中支付。请您投一个硬币：<b>100</b></div>
<div>您还有11 从 211 Cent中支付。请您投一个硬币：<b>20</b></div>
<div>物品金额已付清 &ndash; 谢谢您 9 Cent 找零的捐赠！</div>
<div>&nbsp;</div>
<div>请给出物品的价格：<b>25</b></div>
<div>您还有25 从 25 Cent中支付。请您投一个硬币：<b>27</b></div>
<div>错误的硬币。您还有25 从 25 Cent中支付。请您投一个硬币：<b>5</b></div>
<div>您还有20 从 25 Cent中支付。请您投一个硬币：<b>20</b></div>
<div>物品金额已付清</div>
<p><span id="more-797"></span></p>
<p>&nbsp;我写的参考代码:</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include&lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> eingabe<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  <span style="color: #666666; font-style: italic;">//返回输入的值 </span>
    <span style="color: #993333;">int</span> input<span style="color: #339933;">;</span>
    scanf<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>input<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> input<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;请给出物品的价格:&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> totalPrice <span style="color: #339933;">=</span> eingabe<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 总价格 </span>
    <span style="color: #993333;">int</span> leftPrice <span style="color: #339933;">=</span> totalPrice<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 记录支付后剩余的价格</span>
    <span style="color: #993333;">int</span> coin<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 记录投入的硬币 </span>
    <span style="color: #b1b100;">do</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;您还有 %d 从 %d Cent 中支付. 请您投一个硬币:&quot;</span><span style="color: #339933;">,</span> leftPrice<span style="color: #339933;">,</span> totalPrice<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        coin <span style="color: #339933;">=</span> eingabe<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> coin<span style="color: #339933;">==</span><span style="color: #0000dd;">5</span> <span style="color: #339933;">||</span> coin<span style="color: #339933;">==</span><span style="color: #0000dd;">20</span> <span style="color: #339933;">||</span> coin<span style="color: #339933;">==</span><span style="color: #0000dd;">100</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//如果不是错误的硬币 </span>
            leftPrice <span style="color: #339933;">-=</span> coin<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;错误的硬币.您还有 %d 从 %d Cent 中支付. 请您投一个硬币:&quot;</span><span style="color: #339933;">,</span> leftPrice<span style="color: #339933;">,</span> totalPrice<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>leftPrice <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #666666; font-style: italic;">//如果价格已经付清了=0, 并可能 有结余&lt;0, 就结束循环 </span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;物品金额已付清&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>leftPrice <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//如果多付了钱, 剩余的钱就变成了负数 </span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; - 谢谢您 %d Cent 找零的捐赠！&quot;</span><span style="color: #339933;">,-</span>leftPrice<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    system<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;pause&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/11/09/foreign_c_tests_autoseller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个扩展的C++数组的类</title>
		<link>http://pwwang.com/2009/04/30/%e4%b8%80%e4%b8%aa%e6%89%a9%e5%b1%95%e7%9a%84c%e6%95%b0%e7%bb%84%e7%9a%84%e7%b1%bb/</link>
		<comments>http://pwwang.com/2009/04/30/%e4%b8%80%e4%b8%aa%e6%89%a9%e5%b1%95%e7%9a%84c%e6%95%b0%e7%bb%84%e7%9a%84%e7%b1%bb/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 16:45:42 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=608</guid>
		<description><![CDATA[&#160;

有点类似于STL的map, 不过也有些不同.

map是无序的,但是我在里面加了一个vector来存储key,使之变为有序的,这样就可以同时采用下标进行访问.

<span class="readmore"><a href="http://pwwang.com/2009/04/30/%e4%b8%80%e4%b8%aa%e6%89%a9%e5%b1%95%e7%9a%84c%e6%95%b0%e7%bb%84%e7%9a%84%e7%b1%bb/" title="一个扩展的C++数组的类">Read More: 1660 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>有点类似于STL的map, 不过也有些不同.</p>
<p>map是无序的,但是我在里面加了一个vector来存储key,使之变为有序的,这样就可以同时采用下标进行访问.</p>
<p>先是这么多成员函数,边用边丰富吧.</p>
<p>通过下标访问的时候采用at函数,并且下标可以为负数.另外在向Array中添加元素的时候,如果这个元素的key存在,则更新这个key的value.</p>
<p>&nbsp;<span id="more-608"></span></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#ifndef _ARRAY_H_</span>
<span style="color: #339900;">#define _ARRAY_H_</span>
<span style="color: #339900;">#include &lt;map&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#define ARRAY_TEMP template &lt;class T1, class T2&gt;</span>
<span style="color: #339900;">#define ARRAY_T1S vector&lt;T1&gt;</span>
<span style="color: #339900;">#define ARRAY_T2S vector&lt;T2&gt;</span>
<span style="color: #339900;">#define ARRAY_MIT typename map&lt;T1,T2&gt;::const_iterator</span>
<span style="color: #339900;">#define ARRAY_vint typename ARRAY_T2S::size_type</span>
<span style="color: #339900;">#define ARRAY_for for(ARRAY_vint i=0; i&lt;ks.size(); i++)</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">enum</span> SORTOPT <span style="color: #008000;">&#123;</span>SORT_ASC, SORT_DESC<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">class</span> Array<span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
    map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> m<span style="color: #008080;">;</span>
    ARRAY_T1S ks<span style="color: #008080;">;</span>                                  <span style="color: #666666;">//mark the order of keys of array</span>
    <span style="color: #0000ff;">int</span> get_index<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                    <span style="color: #666666;">//get_index, parameter can be negtive number</span>
                                                <span style="color: #666666;">//range: [-size(),size()), -1=size()-1 </span>
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
    Array<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                                    <span style="color: #666666;">//constructor</span>
    Array<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> ARRAY_T2S <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                    <span style="color: #666666;">//constructor, T1 must be int, keys will be 0,1,2,...</span>
    Array<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                    <span style="color: #666666;">//use map to construct an Array</span>
    Array<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> ARRAY_T1S <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> ARRAY_T2S <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//keys and values</span>
    Array<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">//use Array to construct an Array</span>
    Array<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">//T1 must be int, fill Array with n values</span>
    <span style="color: #0000ff;">void</span> print_r<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                                <span style="color: #666666;">// print the array</span>
    ARRAY_T1S keys<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                            <span style="color: #666666;">// get the keys</span>
    ARRAY_T2S values<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                            <span style="color: #666666;">// get the values</span>
    pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> front<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// get the first key-value pair</span>
    pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> back<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                            <span style="color: #666666;">// get the last</span>
    <span style="color: #0000ff;">unsigned</span> size<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                            <span style="color: #666666;">// get the length of the Array</span>
    <span style="color: #0000ff;">bool</span> empty<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                                <span style="color: #666666;">// tell if this Array is empty</span>
    <span style="color: #0000ff;">void</span> clear<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                                <span style="color: #666666;">// clear this Array</span>
    <span style="color: #0000ff;">void</span> push_back<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// add a new element with pair at the end of the Array</span>
    <span style="color: #0000ff;">void</span> push_back<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>     <span style="color: #666666;">// add a new element with a single key and value at the end of the Array</span>
    <span style="color: #0000ff;">void</span> push_front<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// add a new element with pair at the front of the Array </span>
    <span style="color: #0000ff;">void</span> push_front<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>     <span style="color: #666666;">// add a new element with a key and value at the front of the Array</span>
    pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> pop_back<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// erase the last pair, and return it</span>
    pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> pop_front<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                    <span style="color: #666666;">// erase the first pair, and return it</span>
    <span style="color: #0000ff;">void</span> insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// insert a pair at a subscript</span>
    <span style="color: #0000ff;">void</span> insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">// insert an element with key and value at a subscript</span>
    <span style="color: #0000ff;">void</span> insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// insert a map at a subscript</span>
    <span style="color: #0000ff;">void</span> insert<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">// insert an Array at a subscript</span>
    T2 <span style="color: #000040;">&amp;</span>operator<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                    <span style="color: #666666;">// write or read a value by key</span>
    T2 <span style="color: #000040;">&amp;</span>at<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// read a value at subscript(cannot write)</span>
    pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> pair_at<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            <span style="color: #666666;">// read a pair at subscript</span>
    T1 key_at<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// get key at subscript</span>
    T2 value_at<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                    <span style="color: #666666;">// get value at subscript</span>
    <span style="color: #0000ff;">bool</span> key_exists<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">// tell if a key exists</span>
    <span style="color: #0000ff;">bool</span> value_exists<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">// tell if a value exists</span>
    <span style="color: #0000ff;">bool</span> pair_exists<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// tell if a pair exists</span>
    <span style="color: #0000ff;">bool</span> operator<span style="color: #000080;">==</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            <span style="color: #666666;">// tell if this Array is equal to another</span>
    <span style="color: #0000ff;">bool</span> operator<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            <span style="color: #666666;">// tell if this Array is not equal to another</span>
    ARRAY_T1S keys_of<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">// get the keys of a value</span>
    <span style="color: #0000ff;">int</span> index_of_key<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">// get the subscript of a key</span>
    <span style="color: #0000ff;">int</span> index_of_pair<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// get the subscript of a pair</span>
    vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> indices_of_value<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">// get the indices of a value</span>
    <span style="color: #0000ff;">void</span> erase_at<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>len <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// erase elements from subscript to subscript+len</span>
    <span style="color: #0000ff;">void</span> erase_by_key<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">// erase element by key</span>
    <span style="color: #0000ff;">void</span> erase_by_value<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            <span style="color: #666666;">// erase ELEMENTS by value</span>
    <span style="color: #0000ff;">void</span> erase_by_pair<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">// erase element by pair</span>
    <span style="color: #0000ff;">void</span> erase<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            <span style="color: #666666;">// reload erase_by_pair</span>
    <span style="color: #0000ff;">void</span> erase<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>len <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// reload erase_at</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> operator<span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// return an Array = *this + another Array</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> operator<span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// return an Array = *this + a map</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> operator<span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">// return an Array = *this + a pair</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>operator<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">// add another Array to *this</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>operator<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// add a map to *this</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>operator<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// add a pair to *this</span>
    Array<span style="color: #000080;">&lt;</span> <span style="color: #0000ff;">int</span>,Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span> chunk<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// split this Array to Arrays by a given length</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> sub<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">// return a part of this Array from subscript to end</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> sub<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// return a part of this Array from subscript to subscript+length</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> slice<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            <span style="color: #666666;">// reload sub</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> slice<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// reload sub</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> combine<span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">// the same as operator+</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> merge<span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            <span style="color: #666666;">// combine</span>
    Array<span style="color: #000080;">&lt;</span>T2,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> count_values<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                <span style="color: #666666;">// count the values</span>
    Array<span style="color: #000080;">&lt;</span>T2,T1<span style="color: #000080;">&gt;</span> flip<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// change keys to values and values to keys</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> unique<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// delete duplicated values</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> mapfun<span style="color: #008000;">&#40;</span>T2 <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>T2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            <span style="color: #666666;">// map a function to each value</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> mapfun<span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// map a function to each pair</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> sort_by_keys<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> SORTOPT <span style="color: #000040;">&amp;</span>opt <span style="color: #000080;">=</span> SORT_ASC<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// sort the elements by keys</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> sort_by_values<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> SORTOPT <span style="color: #000040;">&amp;</span>opt <span style="color: #000080;">=</span> SORT_ASC<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">// sort the elements by values</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> reverse<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// reverse the Array</span>
    pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> random<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// get a random pair of the Array</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> shuffle<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        <span style="color: #666666;">// randomly sort the Array</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> splice<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// replace a part of elements with a map</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> splice<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// replace a part of elements with an Array</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">Array</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">Array</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> ARRAY_T2S <span style="color: #000040;">&amp;</span>v2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> n <span style="color: #000080;">=</span> v2.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>n<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        ks.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        m<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#40;</span>T1<span style="color: #008000;">&#41;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> v2<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">Array</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>mp<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_MIT it <span style="color: #000080;">=</span> mp.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it<span style="color: #000040;">!</span><span style="color: #000080;">=</span>mp.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>ks.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>it<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>first<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
    m <span style="color: #000080;">=</span> mp<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">Array</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> vector<span style="color: #000080;">&lt;</span>T1<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>v1, <span style="color: #0000ff;">const</span> vector<span style="color: #000080;">&lt;</span>T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>v2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">unsigned</span> n <span style="color: #000080;">=</span> v1.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>v2.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">?</span>v2.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>v1.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ks <span style="color: #000080;">=</span> v1<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>n<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> v2<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">Array</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>ks <span style="color: #000080;">=</span> a.<span style="color: #007788;">ks</span><span style="color: #008080;">;</span> m <span style="color: #000080;">=</span> a.<span style="color: #007788;">m</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">Array</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>len, <span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>len<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> ks.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>T1<span style="color: #008000;">&#41;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> m<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#40;</span>T1<span style="color: #008000;">&#41;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> value<span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">int</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">get_index</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> index<span style="color: #000080;">&lt;</span><span style="color: #000040;">-</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">||</span>index<span style="color: #000080;">&gt;=</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> 
        <span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Array&lt;T1,T2&gt;: index:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> index <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; out of range:&quot;</span> <span style="color: #000080;">&lt;&lt;</span> ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
        <span style="color: #0000dd;">exit</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> index<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">?</span>index<span style="color: #008080;">:</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>index<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">//!!!!!!be cautious!!!!!</span>
<span style="color: #666666;">//use it when T1,T2 can be cout ed!</span>
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">print_r</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;ARRAY {&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;t[&quot;</span> <span style="color: #000080;">&lt;&lt;</span> i <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;] &quot;</span> <span style="color: #000080;">&lt;&lt;</span> ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; =&gt; &quot;</span> 
             <span style="color: #000080;">&lt;&lt;</span> m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; ,&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;}&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP ARRAY_T1S Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">keys</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> ks<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP ARRAY_T2S Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">values</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    ARRAY_T2S vs<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span>vs.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> vs<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">front</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span>ks<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">back</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> make_pair<span style="color: #008000;">&#40;</span>ks<span style="color: #008000;">&#91;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>,m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">unsigned</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">bool</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>ks.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>m.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>m.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,m.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>    
    m<span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> p.<span style="color: #007788;">second</span><span style="color: #008080;">;</span> 
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>key_exists<span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> ks.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>key, <span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    m<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> value<span style="color: #008080;">;</span> 
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>key_exists<span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> ks.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">push_front</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    m<span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> p.<span style="color: #007788;">second</span><span style="color: #008080;">;</span> 
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>key_exists<span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> ks.<span style="color: #007788;">push_front</span><span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">push_front</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>key, <span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    m<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> value<span style="color: #008080;">;</span> 
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>key_exists<span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> ks.<span style="color: #007788;">push_front</span><span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">pop_back</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> p <span style="color: #000080;">=</span> back<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ks.<span style="color: #007788;">pop_back</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    m.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">pop_front</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> p <span style="color: #000080;">=</span> front<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ks<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
    ks.<span style="color: #007788;">pop_back</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    m.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> p<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>at, <span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    m<span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> p.<span style="color: #007788;">second</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>key_exists<span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> get_index<span style="color: #008000;">&#40;</span>at<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">typename</span> ARRAY_T1S<span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> it <span style="color: #000080;">=</span> find<span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ks.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>it,p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>at, <span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>k, <span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    m<span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> v<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>key_exists<span style="color: #008000;">&#40;</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> get_index<span style="color: #008000;">&#40;</span>at<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">typename</span> ARRAY_T1S<span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> it <span style="color: #000080;">=</span> find<span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ks.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>it,k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>at, map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>mp<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">typename</span> ARRAY_T1S<span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> itks <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>at<span style="color: #000080;">==</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">?</span>ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>find<span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks<span style="color: #008000;">&#91;</span>get_index<span style="color: #008000;">&#40;</span>at<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ARRAY_T1S ksmp<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_MIT it<span style="color: #000080;">=</span>mp.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it<span style="color: #000040;">!</span><span style="color: #000080;">=</span>mp.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> ksmp.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>it<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>first<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ARRAY_vint s <span style="color: #000080;">=</span> ksmp.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>s<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">typename</span> ARRAY_T1S<span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> vit <span style="color: #000080;">=</span>  find<span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ksmp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>vit<span style="color: #000040;">!</span><span style="color: #000080;">=</span>ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> ksmp.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>vit<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
        m<span style="color: #008000;">&#91;</span>ksmp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> mp<span style="color: #008000;">&#91;</span>ksmp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    ks.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>itks,ksmp.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ksmp.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>at, Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>insert<span style="color: #008000;">&#40;</span>at,a.<span style="color: #007788;">m</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>    
&nbsp;
ARRAY_TEMP T2 <span style="color: #000040;">&amp;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>key_exists<span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> ks.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> m<span style="color: #008000;">&#91;</span>key<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP T2 <span style="color: #000040;">&amp;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span> p <span style="color: #000080;">=</span> get_index<span style="color: #008000;">&#40;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">pair_at</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span> p <span style="color: #000080;">=</span> get_index<span style="color: #008000;">&#40;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> make_pair<span style="color: #008000;">&#40;</span>ks<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>,m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP T1 Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">key_at</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> ks<span style="color: #008000;">&#91;</span>get_index<span style="color: #008000;">&#40;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP T2 Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">value_at</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> at<span style="color: #008000;">&#40;</span>get_index<span style="color: #008000;">&#40;</span>index<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">bool</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">key_exists</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> find<span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,k<span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">bool</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">value_exists</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    ARRAY_T2S vs <span style="color: #000080;">=</span> values<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">typename</span> ARRAY_T2S<span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> it <span style="color: #000080;">=</span> find<span style="color: #008000;">&#40;</span>vs.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,vs.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> it<span style="color: #000040;">!</span><span style="color: #000080;">=</span>vs.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">bool</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">pair_exists</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>key_exists<span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> m<span style="color: #008000;">&#91;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>p.<span style="color: #007788;">second</span> <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">bool</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #000080;">==</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> a.<span style="color: #007788;">ks</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span> ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>a.<span style="color: #007788;">ks</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> at<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>a.<span style="color: #007788;">at</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;i:&quot;</span><span style="color: #000080;">&lt;&lt;</span>i <span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">bool</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> <span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #000080;">==</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP ARRAY_T1S Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">keys_of</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    ARRAY_T1S aks<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>value <span style="color: #008000;">&#41;</span> aks.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> aks<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">int</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">index_of_key</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>key_exists<span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>key <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> i<span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">int</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">index_of_pair</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>pair_exists<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> index_of_key<span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">indices_of_value</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    vector<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> a<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>value <span style="color: #008000;">&#41;</span> a.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">erase_at</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>index, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>len<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    print_r<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> p <span style="color: #000080;">=</span> get_index<span style="color: #008000;">&#40;</span>index<span style="color: #008000;">&#41;</span>, s <span style="color: #000080;">=</span> p<span style="color: #000040;">+</span>len<span style="color: #000080;">&gt;=</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">?</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span><span style="color: #008000;">&#40;</span>p<span style="color: #000040;">+</span>len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span>p<span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>s<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        m.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>ks<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        ks.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>find<span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">erase_by_key</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T1 <span style="color: #000040;">&amp;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    m.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>key<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ks.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>find<span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,key<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">erase_by_value</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> T2 <span style="color: #000040;">&amp;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    ARRAY_T1S ekeys <span style="color: #000080;">=</span> keys_of<span style="color: #008000;">&#40;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>ekeys.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        m.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>ekeys<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        ks.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>find<span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ks.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,ekeys<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">erase_by_pair</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>pair_exists<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
    erase_by_key<span style="color: #008000;">&#40;</span>p.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>erase_by_pair<span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP <span style="color: #0000ff;">void</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>index, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>len<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>erase_at<span style="color: #008000;">&#40;</span>index,len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000040;">+</span> a.<span style="color: #007788;">m</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span>map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>mp<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> b <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span>
    b.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,mp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #000040;">+</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> b <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span>
    b.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> b<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000040;">+</span> a<span style="color: #008080;">;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>mp<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000040;">+</span> mp<span style="color: #008080;">;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">operator</span><span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000040;">+</span> p<span style="color: #008080;">;</span> <span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span> <span style="color: #0000ff;">int</span>,Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">chunk</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>len<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span> <span style="color: #0000ff;">int</span>,Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span> aa<span style="color: #008080;">;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span>
        a <span style="color: #000040;">+</span><span style="color: #000080;">=</span> pair_at<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>len<span style="color: #000080;">==</span><span style="color: #0000dd;">0</span> <span style="color: #000040;">||</span> i<span style="color: #000080;">==</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> aa <span style="color: #000040;">+</span><span style="color: #000080;">=</span> make_pair<span style="color: #008000;">&#40;</span>aa.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> a.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> aa<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">sub</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>i, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>l<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> p <span style="color: #000080;">=</span> get_index<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_vint x<span style="color: #000080;">=</span>i<span style="color: #008080;">;</span> x<span style="color: #000080;">&lt;</span>i<span style="color: #000040;">+</span>l<span style="color: #008080;">;</span> x<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>a <span style="color: #000040;">+</span><span style="color: #000080;">=</span> pair_at<span style="color: #008000;">&#40;</span>x<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">sub</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> sub<span style="color: #008000;">&#40;</span>i,ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">slice</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>i, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>l<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> sub<span style="color: #008000;">&#40;</span>i,l<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">slice</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> sub<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">combine</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000040;">+</span> a<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">merge</span><span style="color: #008000;">&#40;</span>Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span> <span style="color: #000040;">+</span> a<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T2,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">count_values</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T2,<span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> result<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>result.<span style="color: #007788;">key_exists</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> result<span style="color: #008000;">&#91;</span>m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> result<span style="color: #008000;">&#91;</span>m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">else</span> result<span style="color: #008000;">&#91;</span>m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> result<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T2,T1<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">flip</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T2,T1<span style="color: #000080;">&gt;</span> a<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span>a.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>,ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">unique</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>a.<span style="color: #007788;">value_exists</span><span style="color: #008000;">&#40;</span>at<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> a<span style="color: #000040;">+</span><span style="color: #000080;">=</span>pair_at<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">mapfun</span><span style="color: #008000;">&#40;</span>T2 <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>f<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>T2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span>    a<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>f<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#91;</span>ks<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">mapfun</span><span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>f<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a<span style="color: #008080;">;</span>
    ARRAY_for<span style="color: #008000;">&#123;</span>    a <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">*</span>f<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>pair_at<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">sort_by_keys</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> SORTOPT <span style="color: #000040;">&amp;</span>opt<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> opt<span style="color: #000080;">==</span>SORT_ASC <span style="color: #008000;">&#41;</span>    sort<span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">ks</span>.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, a.<span style="color: #007788;">ks</span>.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">else</span> sort<span style="color: #008000;">&#40;</span>a.<span style="color: #007788;">ks</span>.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, a.<span style="color: #007788;">ks</span>.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, greater<span style="color: #000080;">&lt;</span>T1<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">sort_by_values</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> SORTOPT <span style="color: #000040;">&amp;</span>opt<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span>
    ARRAY_T2S vs <span style="color: #000080;">=</span> values<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> opt<span style="color: #000080;">==</span>SORT_ASC <span style="color: #008000;">&#41;</span>    sort<span style="color: #008000;">&#40;</span>vs.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, vs.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">else</span> sort<span style="color: #008000;">&#40;</span>vs.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, vs.<span style="color: #007788;">end</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, greater<span style="color: #000080;">&lt;</span>T1<span style="color: #000080;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    a.<span style="color: #007788;">ks</span>.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>vs.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        ARRAY_T1S ksof <span style="color: #000080;">=</span> keys_of<span style="color: #008000;">&#40;</span>vs<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>ARRAY_vint j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j<span style="color: #000080;">&lt;</span>ksof.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            a.<span style="color: #007788;">ks</span>.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span>ksof<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">reverse</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>    
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> a <span style="color: #000040;">+</span><span style="color: #000080;">=</span> pair_at<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">random</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000dd;">srand</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">time</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> pair_at<span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">%</span>ks.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">shuffle</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a, b <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>b.<span style="color: #007788;">empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        pair<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> p <span style="color: #000080;">=</span> b.<span style="color: #007788;">random</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        a <span style="color: #000040;">+</span><span style="color: #000080;">=</span> p<span style="color: #008080;">;</span>
        b.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>    
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">splice</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>at, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>len, <span style="color: #0000ff;">const</span> map<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>mp<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> a <span style="color: #000080;">=</span> <span style="color: #000040;">*</span><span style="color: #0000dd;">this</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> p <span style="color: #000080;">=</span> get_index<span style="color: #008000;">&#40;</span>at<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    a.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>p,len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    a.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>at,mp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> a<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
ARRAY_TEMP Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">splice</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>at, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>len, <span style="color: #0000ff;">const</span> Array<span style="color: #000080;">&lt;</span>T1,T2<span style="color: #000080;">&gt;</span> <span style="color: #000040;">&amp;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> splice<span style="color: #008000;">&#40;</span>at,len,a.<span style="color: #007788;">m</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #339900;">#endif</span></pre></div></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/04/30/%e4%b8%80%e4%b8%aa%e6%89%a9%e5%b1%95%e7%9a%84c%e6%95%b0%e7%bb%84%e7%9a%84%e7%b1%bb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jacobi法求特征值和特征向量[C++]</title>
		<link>http://pwwang.com/2009/04/29/jacobi%e6%b3%95%e6%b1%82%e7%89%b9%e5%be%81%e5%80%bc%e5%92%8c%e7%89%b9%e5%be%81%e5%90%91%e9%87%8fc/</link>
		<comments>http://pwwang.com/2009/04/29/jacobi%e6%b3%95%e6%b1%82%e7%89%b9%e5%be%81%e5%80%bc%e5%92%8c%e7%89%b9%e5%be%81%e5%90%91%e9%87%8fc/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 07:24:12 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Jacobi方法求特征值和特征向量]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=607</guid>
		<description><![CDATA[&#160;

前面写过一个Perl版本, 但计算起来速度太慢, 改用C++试试.

理论算法在这里.

<span class="readmore"><a href="http://pwwang.com/2009/04/29/jacobi%e6%b3%95%e6%b1%82%e7%89%b9%e5%be%81%e5%80%bc%e5%92%8c%e7%89%b9%e5%be%81%e5%90%91%e9%87%8fc/" title="Jacobi法求特征值和特征向量[C++]">Read More: 2336 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>前面写过一个<a href="http://pwwang.com/?p=578" target="_blank">Perl版本</a>, 但计算起来速度太慢, 改用C++试试.</p>
<p>理论算法在<a href="http://pwwang.com/?p=589" target="_blank">这里</a>.</p>
<p><span id="more-607"></span></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/*******************************************************
#
# Panwen Wang, April 29th, 2009
# pwwang AT pwwang.com
# get eigenvalue and eigenvector of
# a real symmetric matrix like
#  1  -1  0 
# -1   1  2
#  0   2  1
#
# Algorthm:
# 1. get a nonzero and non-diagonal element a[i,j] of matrix A, usually
#    the maximun absolute value of non-diagonal elements of A (max(A));  
# 2. give sin(phi) and cos(phi) by 
#    ( a[j,j]-a[i,i] )*sin(2*phi) + 2*a[i,j]*cos(2*phi) = 0 ;
#    =&gt; tan(2*phi) = 2*a[i,j]/(a[i,i]-a[j,j]) 
#    =&gt; phi = arctan(2*a[i,j]/(a[i,i]-a[j,j]))/2 
# 3. get elements of a new matrix A1(a1[i,j]) by
#    a1[i,i] = a[i,i]*cos^2(phi) + a[j,j]*sin^2(phi) + 2*a[i,j]*cos(phi)*sin(phi)
#    a1[j,j] = a[i,i]*sin^2(phi) + a[j,j]*cos^2(phi) - 2*a[i,j]*cos(phi)*sin(phi)
#    a1[i,l] = a1[l,i] = a[i,l]*cos(phi) + a[j,l]*sin(phi)       ( l!=i,j )
#    a1[j,l] = a1[l,j] = -a[i,l]*sin(phi) + a[j,l]*cos(phi)      ( l!=i,j )
#    a1[l,m] = a1[m,l] = a[m,l]                                  ( m,l != i,j )
#    a1[i,j] = a1[j,i] = { (a[j,j]-a[i,i])*sin(2*phi) }/2 + a[i,j]*(cos^2(phi) - sin^2(phi))
# 4. let A1 be the substitution of A, repeat step 1,2,3 and get A2, and A3,A4,...,An can be 
#    obtained by the same way. Calculation ceases if max(An) is less than the given threshold.
#
# Usage:
#        JACOBI_ARRAY ja(3), value;
#        JACOBI_MATRIX jm, vector;
#        ja[0] = 1; ja[1] = -1; ja[2] = 0;
#        jm.push_back(ja);
#        ja[0] = -1; ja[1] = 1; ja[2] = 2;
#        jm.push_back(ja);
#        ja[0] = 0; ja[1] = 2; ja[0] = 1;
#        jm.push_back(ja);
#        Jacobi j;
#        j.setMatrix(jm);
#         value = j.getEigenvalues();
#        vector = j.getEigenvectors();
#
********************************************************/</span>
<span style="color: #339900;">#ifndef _JACOBI_H_</span>
<span style="color: #339900;">#define _JACOBI_H_</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#define JACOBI_ARRAY vector&lt;double&gt;</span>
<span style="color: #339900;">#define JACOBI_MATRIX vector&lt; vector&lt;double&gt; &gt;</span>
<span style="color: #339900;">#define JACOBI_vint vector&lt;double&gt;::size_type</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">class</span> Jacobi<span style="color: #008000;">&#123;</span>
<span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
    JACOBI_MATRIX matrix<span style="color: #008080;">;</span>
    JACOBI_ARRAY  eigenvalues<span style="color: #008080;">;</span>
    JACOBI_MATRIX eigenvectors<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> e<span style="color: #008080;">;</span>   <span style="color: #666666;">//precision</span>
    <span style="color: #0000ff;">int</span> dimen<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span> debug<span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">double</span> max<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> JACOBI_MATRIX <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    JACOBI_MATRIX newMatrix<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> JACOBI_MATRIX <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> jacobi<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
    Jacobi<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> setMatrix<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> JACOBI_MATRIX <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> setE<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> setDebug<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> <span style="color: #000040;">&amp;</span>d <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    JACOBI_ARRAY getEigenvalues<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    JACOBI_MATRIX getEigenvectors<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> printEigen<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> printMatrix<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> printMatrix<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> JACOBI_MATRIX <span style="color: #000040;">&amp;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> demo<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">Jacobi</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">:</span>e<span style="color: #008000;">&#40;</span><span style="color:#800080;">1e-5</span><span style="color: #008000;">&#41;</span>,debug<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">setE</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span>ee<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> e <span style="color: #000080;">=</span> ee<span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">setDebug</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">bool</span> <span style="color: #000040;">&amp;</span>d<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> debug <span style="color: #000080;">=</span> d<span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">setMatrix</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> JACOBI_MATRIX <span style="color: #000040;">&amp;</span> jm<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    dimen <span style="color: #000080;">=</span> jm.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    matrix <span style="color: #000080;">=</span> jm<span style="color: #008080;">;</span>
    eigenvalues.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    eigenvectors.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//matrix.resize(dimen);</span>
    <span style="color: #666666;">//for(JACOBI_vint i=0; i&lt;dimen; i++){ matrix[i] = jm[i];}</span>
    jacobi<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
JACOBI_ARRAY Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">getEigenvalues</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> eigenvalues<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
JACOBI_MATRIX Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">getEigenvectors</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><span style="color: #0000ff;">return</span> eigenvectors<span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">max</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> JACOBI_MATRIX <span style="color: #000040;">&amp;</span>jm, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>maxi, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>maxj<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">double</span> m <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    maxi<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>, maxj<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>j<span style="color: #008000;">&#41;</span>
                <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">fabs</span><span style="color: #008000;">&#40;</span>jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>m<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                    m <span style="color: #000080;">=</span> <span style="color: #0000dd;">fabs</span><span style="color: #008000;">&#40;</span>jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                    maxi <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span> maxj <span style="color: #000080;">=</span> j<span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> m<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
JACOBI_MATRIX Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">newMatrix</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> JACOBI_MATRIX <span style="color: #000040;">&amp;</span>jm, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>i, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>j, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span>phi<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    JACOBI_MATRIX jm1<span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> sp <span style="color: #000080;">=</span> <span style="color: #0000dd;">sin</span><span style="color: #008000;">&#40;</span>phi<span style="color: #008000;">&#41;</span>, cp <span style="color: #000080;">=</span> <span style="color: #0000dd;">cos</span><span style="color: #008000;">&#40;</span>phi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> ii<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> ii<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> ii<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> jj<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> jj<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> jj<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> ii<span style="color: #000080;">==</span>i <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>     <span style="color: #666666;">// row i</span>
                <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> jj<span style="color: #000080;">==</span>i <span style="color: #008000;">&#41;</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>cp<span style="color: #000040;">*</span>cp <span style="color: #000040;">+</span> jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sp<span style="color: #000040;">*</span>sp <span style="color: #000040;">+</span> <span style="color: #0000dd;">2</span><span style="color: #000040;">*</span>jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>cp<span style="color: #000040;">*</span>sp<span style="color: #008080;">;</span> 
                <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> jj<span style="color: #000080;">==</span>j <span style="color: #008000;">&#41;</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>sp<span style="color: #000040;">*</span>cp <span style="color: #000040;">+</span> jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>cp<span style="color: #000040;">*</span>cp<span style="color: #000040;">-</span>sp<span style="color: #000040;">*</span>sp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
                <span style="color: #0000ff;">else</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>cp <span style="color: #000040;">+</span> jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sp<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span> ii<span style="color: #000080;">==</span>j <span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><span style="color: #666666;">// row j</span>
                <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> jj<span style="color: #000080;">==</span>i <span style="color: #008000;">&#41;</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>sp<span style="color: #000040;">*</span>cp <span style="color: #000040;">+</span> jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>cp<span style="color: #000040;">*</span>cp<span style="color: #000040;">-</span>sp<span style="color: #000040;">*</span>sp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> jj<span style="color: #000080;">==</span>j <span style="color: #008000;">&#41;</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sp<span style="color: #000040;">*</span>sp <span style="color: #000040;">+</span> jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>cp<span style="color: #000040;">*</span>cp <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span><span style="color: #000040;">*</span>jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>cp<span style="color: #000040;">*</span>sp<span style="color: #008080;">;</span>
                <span style="color: #0000ff;">else</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>cp <span style="color: #000040;">-</span> jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sp<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>            <span style="color: #666666;">// row l ( l!=i,j )</span>
                <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> jj<span style="color: #000080;">==</span>i <span style="color: #008000;">&#41;</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>cp <span style="color: #000040;">+</span> jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sp<span style="color: #008080;">;</span>
                <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> jj<span style="color: #000080;">==</span>j <span style="color: #008000;">&#41;</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>cp <span style="color: #000040;">-</span> jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #000040;">*</span>sp<span style="color: #008080;">;</span>
                <span style="color: #0000ff;">else</span> jm1<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span>ii<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>jj<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>    
    <span style="color: #0000ff;">return</span> jm1<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">jacobi</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    JACOBI_MATRIX jm <span style="color: #000080;">=</span> matrix<span style="color: #008080;">;</span>  <span style="color: #666666;">// initial matrix</span>
    <span style="color: #0000ff;">double</span> phi, m<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> i,j<span style="color: #008080;">;</span>
    JACOBI_MATRIX tempVectors<span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span>, vectors<span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span>, cmat<span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint x<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> x<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> x<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        tempVectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint y<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> y<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> y<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>x<span style="color: #000080;">==</span>y<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> tempVectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color:#800080;">1.0</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span> 
            <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span> tempVectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color:#800080;">0.0</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #008080;">;;</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> <span style="color: #666666;">// step 4</span>
        m <span style="color: #000080;">=</span>  max<span style="color: #008000;">&#40;</span>jm,i,j<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  <span style="color: #666666;">// step 1</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>debug<span style="color: #008000;">&#41;</span> <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%-3d, %-3d, %.9f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>,i,j,m<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> m <span style="color: #000080;">&lt;</span> e <span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span> 
        <span style="color: #666666;">// if the maximum value of the matrix LE(Less than or Equal to) the limit, break</span>
        phi <span style="color: #000080;">=</span> <span style="color: #0000dd;">atan2</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">*</span>jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>, jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">-</span> jm<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">/</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>  <span style="color: #666666;">// step 2</span>
        jm <span style="color: #000080;">=</span> newMatrix<span style="color: #008000;">&#40;</span>jm,i,j,phi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// step 3</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint x<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> x<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> x<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            cmat<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            vectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint y<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> y<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> y<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>x<span style="color: #000080;">==</span>y<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> cmat<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color:#800080;">1.0</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
                <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span> cmat<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color:#800080;">0.0</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
                vectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color:#800080;">0.0</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>    
        cmat<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">cos</span><span style="color: #008000;">&#40;</span>phi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        cmat<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">cos</span><span style="color: #008000;">&#40;</span>phi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        cmat<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">sin</span><span style="color: #008000;">&#40;</span>phi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        cmat<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">sin</span><span style="color: #008000;">&#40;</span>phi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint x<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> x<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> x<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> <span style="color: #666666;">// for eigenvectors</span>
            <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint y<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> y<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> y<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint z<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> z<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> z<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
                    vectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> vectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> tempVectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>z<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> cmat<span style="color: #008000;">&#91;</span>z<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
                <span style="color: #666666;">//print vectors[x][y],&quot;-&quot;,tempVectors[x][y],&quot; &quot;;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
        tempVectors <span style="color: #000080;">=</span> vectors<span style="color: #008080;">;</span>
        <span style="color: #666666;">//@tempVectors = @vectors;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #666666;">// the digonal elements are the eigenvalues</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint x<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> x<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> x<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> eigenvalues<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> jm<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span> <span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint x<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> x<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> x<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        eigenvectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint y<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> y<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> y<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            eigenvectors<span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> vectors<span style="color: #008000;">&#91;</span>y<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>x<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>debug<span style="color: #008000;">&#41;</span> printEigen<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">printEigen</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Eigenvalue [&quot;</span> <span style="color: #000080;">&lt;&lt;</span> i <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;]: &quot;</span> <span style="color: #000080;">&lt;&lt;</span> eigenvalues<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Eigenvector[&quot;</span> <span style="color: #000080;">&lt;&lt;</span> i <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;]: [ &quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%9.6f, &quot;</span>,eigenvectors<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; ] <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">printMatrix</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> printMatrix<span style="color: #008000;">&#40;</span>matrix<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">printMatrix</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> JACOBI_MATRIX <span style="color: #000040;">&amp;</span>jm<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>JACOBI_vint j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j<span style="color: #000080;">&lt;</span>dimen<span style="color: #008080;">;</span> j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000dd;">printf</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;%9.6f, &quot;</span>, jm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Jacobi<span style="color: #008080;">::</span><span style="color: #007788;">demo</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    dimen <span style="color: #000080;">=</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>
    eigenvalues.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    eigenvectors.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    matrix.<span style="color: #007788;">resize</span><span style="color: #008000;">&#40;</span>dimen<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    debug <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
    e <span style="color: #000080;">=</span> <span style="color:#800080;">1e-5</span><span style="color: #008080;">;</span>    
    JACOBI_ARRAY ja<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    matrix<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ja<span style="color: #008080;">;</span>
    ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    matrix<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ja<span style="color: #008080;">;</span>
    ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> ja<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span>
    matrix<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ja<span style="color: #008080;">;</span>
    printMatrix<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    jacobi<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    printEigen<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    
    <span style="color: #ff0000; font-style: italic;">/*
     2.000000, -1.000000,  0.000000, 
    -1.000000,  2.000000, -1.000000, 
     0.000000, -1.000000,  2.000000, 
    Eigenvalue [0]: 3.41421
    Eigenvector[0]: [  0.500000, -0.707107,  0.500000,  ] 
    Eigenvalue [1]: 2
    Eigenvector[1]: [  0.707107,  0.000000, -0.707107,  ] 
    Eigenvalue [2]: 0.585786
    Eigenvector[2]: [  0.500000,  0.707107,  0.500000,  ]
    */</span>    
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #339900;">#endif</span></pre></div></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/04/29/jacobi%e6%b3%95%e6%b1%82%e7%89%b9%e5%be%81%e5%80%bc%e5%92%8c%e7%89%b9%e5%be%81%e5%90%91%e9%87%8fc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>常用的C++字符串操作函数</title>
		<link>http://pwwang.com/2009/04/22/%e5%b8%b8%e7%94%a8%e7%9a%84c%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%93%8d%e4%bd%9c%e5%87%bd%e6%95%b0/</link>
		<comments>http://pwwang.com/2009/04/22/%e5%b8%b8%e7%94%a8%e7%9a%84c%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%93%8d%e4%bd%9c%e5%87%bd%e6%95%b0/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 09:11:36 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[字符串操作]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=602</guid>
		<description><![CDATA[&#160;

又做了一件无聊的事，把php里的字符串操作函数用c++写了一遍，备不时之需。

其中与HTML相关的函数，加密相关函数没有写。

<span class="readmore"><a href="http://pwwang.com/2009/04/22/%e5%b8%b8%e7%94%a8%e7%9a%84c%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%93%8d%e4%bd%9c%e5%87%bd%e6%95%b0/" title="常用的C++字符串操作函数">Read More: 6295 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>又做了一件无聊的事，把php里的字符串操作函数用c++写了一遍，备不时之需。</p>
<p>其中与HTML相关的函数，加密相关函数没有写。</p>
<p>另外，这些函数只是实现了功能，算法和效率上未经考究。</p>
<p>字符串的其他操作请见:<a href="http://pwwang.com/?p=418" target="_blank" rel="bookmark">C++标准库string类型的操作总结</a></p>
<p>其中包括的Array.h库在<a href="http://pwwang.com/?p=608" target="_blank">这里</a></p>
<p><span id="more-602"></span></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#ifndef _STR_H_</span>
<span style="color: #339900;">#define _STR_H_</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
<span style="color: #339900;">#include &lt;cmath&gt;</span>
<span style="color: #339900;">#include &lt;cctype&gt;</span>
<span style="color: #666666;">//#include &lt;algorithm&gt;</span>
<span style="color: #339900;">#include &quot;Array.h&quot;</span>
<span style="color: #339900;">#ifndef sint</span>
<span style="color: #339900;">#define sint string::size_type</span>
<span style="color: #339900;">#endif</span>
<span style="color: #339900;">#ifndef ints</span>
<span style="color: #339900;">#define ints Array&lt;int,int&gt;</span>
<span style="color: #339900;">#endif</span>
<span style="color: #339900;">#ifndef strings</span>
<span style="color: #339900;">#define strings Array&lt;int,string&gt;</span>
<span style="color: #339900;">#endif</span>
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 * string addslashes ( string str )
 *
 * 返回字符串，该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。
 * 这些字符是单引号（'）、双引号（&quot;）、反斜线（\）与 NUL（NULL 字符）。
 * /     
string addslashes(const string &amp;str){
    string temp = &quot;&quot;;
    for(sint i=0; i!=str.size(); i++){
        if(str[i]==chr(39) || str[i]==chr(34) || str[i]==chr(92) || str[i]==chr(0)){
            temp += '\\' ;
            temp += str[i];
        } else temp += str[i];
    }
    return temp;
}
*/</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 *    string rtrim ( string str [, string charlist] )
 *
 *  This function returns a string with whitespace stripped from the end of str.
 *  Without the second parameter, rtrim() will strip these characters:
 *  &quot; &quot; (ASCII 32 (0x20)), an ordinary space. 
 *  &quot;\t&quot; (ASCII 9 (0x09)), a tab.
 *  &quot;\n&quot; (ASCII 10 (0x0A)), a new line (line feed).
 *  &quot;\r&quot; (ASCII 13 (0x0D)), a carriage return.
 *  &quot;\0&quot; (ASCII 0 (0x00)), the NUL-byte. 
 */</span> 
string rtrim<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>charlist <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot; <span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #006699; font-weight: bold;">\0</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> str<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>charlist.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> s.<span style="color: #007788;">rfind</span><span style="color: #008000;">&#40;</span>charlist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>s.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> 
            s<span style="color: #000080;">=</span>rtrim<span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,s.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
        <span style="color: #008000;">&#125;</span>    
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***********
 * string chr ( int ascii )
 *  
 * 返回相对应于 ascii 所指定的单个字符。
 */</span> 
<span style="color: #0000ff;">char</span> chr<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>asc<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #008000;">&#41;</span>asc<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***********
 * int ord ( string string )
 *  
 * Returns the ASCII value of the first character of string.
 */</span>
<span style="color: #0000ff;">int</span> ord<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>c<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> 
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***********
 * return the ascii of the first char of str
 */</span>  
<span style="color: #0000ff;">int</span> ord<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>str<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> 
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***********
 * int asc(string string)
 * This is an alias of ord 
 */</span> 
<span style="color: #0000ff;">int</span> asc<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> ord<span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> 
<span style="color: #0000ff;">int</span> asc<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> ord<span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/************
 * mixed count_chars ( string string  )
 * 
 * 统计 string 中每个字节值（0..255）出现的次数。
 */</span>  
ints count_chars<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    ints is<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">256</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        is<span style="color: #008000;">&#91;</span>ord<span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">++</span> <span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> is<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*************
 * array explode ( string separator, string string [, int limit] )
 *  
 * 此函数返回由字符串组成的数组，每个元素都是 string 的一个子串，
 *  它们被字符串 separator 作为边界点分割出来。
 */</span>   
strings explode<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>separator, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> str<span style="color: #008080;">;</span>
    strings ss<span style="color: #008080;">;</span>
    sint pos<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">do</span><span style="color: #008000;">&#123;</span>
        pos <span style="color: #000080;">=</span> s.<span style="color: #007788;">find</span><span style="color: #008000;">&#40;</span>separator<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        ss <span style="color: #000040;">+</span><span style="color: #000080;">=</span> make_pair<span style="color: #008000;">&#40;</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,string<span style="color: #008000;">&#40;</span>s,<span style="color: #0000dd;">0</span>,s.<span style="color: #007788;">find_first_of</span><span style="color: #008000;">&#40;</span>separator<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        s <span style="color: #000080;">=</span> s.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span>pos<span style="color: #000040;">+</span>separator.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span> pos<span style="color: #000040;">!</span><span style="color: #000080;">=</span>string<span style="color: #008080;">::</span><span style="color: #007788;">npos</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> ss<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
strings split<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>separator, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> explode<span style="color: #008000;">&#40;</span>separator, str<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
strings str_split<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>separator, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> explode<span style="color: #008000;">&#40;</span>separator, str<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/**************
 * string implode ( string glue, array pieces )
 *  
 * Returns a string containing a string representation of all the array
 * elements in the same order, with the glue string between each element. *
 */</span>    
string implode<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>glue, strings <span style="color: #000040;">&amp;</span>ss<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        s <span style="color: #000040;">+</span><span style="color: #000080;">=</span> glue <span style="color: #000040;">+</span> ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
string join<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>glue, strings <span style="color: #000040;">&amp;</span>ss<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> implode<span style="color: #008000;">&#40;</span>glue,ss<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 *    string ltrim ( string str [, string charlist] )
 *
 *  This function returns a string with whitespace stripped from the beginning of str.
 *  Without the second parameter, rtrim() will strip these characters:
 *  &quot; &quot; (ASCII 32 (0x20)), an ordinary space. 
 *  &quot;\t&quot; (ASCII 9 (0x09)), a tab.
 *  &quot;\n&quot; (ASCII 10 (0x0A)), a new line (line feed).
 *  &quot;\r&quot; (ASCII 13 (0x0D)), a carriage return.
 *  &quot;\0&quot; (ASCII 0 (0x00)), the NUL-byte.
 *  &quot;\x0B&quot; (ASCII 11 (0x0B)), a vertical tab.  
 */</span> 
string ltrim<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>charlist<span style="color: #000080;">=</span><span style="color: #FF0000;">&quot; <span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #006699; font-weight: bold;">\0</span>&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> str<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>charlist.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">find</span><span style="color: #008000;">&#40;</span>charlist<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>s<span style="color: #000080;">=</span>ltrim<span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span>    
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">//trim a string</span>
string trim<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string<span style="color: #000040;">&amp;</span> str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s<span style="color: #000080;">=</span>str<span style="color: #008080;">;</span>
    <span style="color: #666666;">//trim left</span>
    s <span style="color: #000080;">=</span> ltrim<span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">//trim right</span>
    s <span style="color: #000080;">=</span> rtrim<span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/**************
 * string str_replace(string search, string replace, string subject[ , int &amp;count])
 *
 * This function returns a string with all occurrences of search 
 *  in subject replaced with the given replace value. 
 *  The amount of occurrences will be stored in count if given  
 */</span>    
string str_replace<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>search, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>replace, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>subject, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>count<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    strings ss <span style="color: #000080;">=</span> split<span style="color: #008000;">&#40;</span>search, subject<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    count <span style="color: #000080;">=</span> ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> join<span style="color: #008000;">&#40;</span>replace, ss<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
string str_replace<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>search, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>replace, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>subject<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    strings ss <span style="color: #000080;">=</span> split<span style="color: #008000;">&#40;</span>search, subject<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> join<span style="color: #008000;">&#40;</span>replace, ss<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***************
 * string strtolower(string string)
 *  
 * Make a string lowercase
 */</span>  
string strtolower<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        s <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">tolower</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***************
 * string strtoupper(string string)
 *  
 * Make a string uppercase
 */</span>  
string strtoupper<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        s <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">toupper</span><span style="color: #008000;">&#40;</span>str<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/**************
 * string str_ireplace(string search, string replace, string subject[ , int &amp;count])
 *
 * Case-insensitive str_replace
 */</span> 
string str_ireplace<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>search, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>replace, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>subject, <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>count<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    ints is<span style="color: #008000;">&#40;</span>subject.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>subject.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">isupper</span><span style="color: #008000;">&#40;</span>subject<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> is<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    string str <span style="color: #000080;">=</span> strtolower<span style="color: #008000;">&#40;</span>subject<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    string srh <span style="color: #000080;">=</span> strtolower<span style="color: #008000;">&#40;</span>search<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    strings ss <span style="color: #000080;">=</span> split<span style="color: #008000;">&#40;</span>srh, str<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    count <span style="color: #000080;">=</span> ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    strings rs<span style="color: #008000;">&#40;</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,string<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    sint pos <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j<span style="color: #000040;">!</span><span style="color: #000080;">=</span>ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>is<span style="color: #008000;">&#91;</span>pos<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> rs<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> strtoupper<span style="color: #008000;">&#40;</span>ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">else</span> rs<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
            pos<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        pos <span style="color: #000040;">+</span><span style="color: #000080;">=</span> search.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> join<span style="color: #008000;">&#40;</span>replace, rs<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
string str_ireplace<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>search, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>replace, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>subject<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    ints is<span style="color: #008000;">&#40;</span>subject.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>subject.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">isupper</span><span style="color: #008000;">&#40;</span>subject<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> is<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    string str <span style="color: #000080;">=</span> strtolower<span style="color: #008000;">&#40;</span>subject<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    string srh <span style="color: #000080;">=</span> strtolower<span style="color: #008000;">&#40;</span>search<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    strings ss <span style="color: #000080;">=</span> split<span style="color: #008000;">&#40;</span>srh, str<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    strings rs<span style="color: #008000;">&#40;</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,string<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    sint pos <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint j<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> j<span style="color: #000040;">!</span><span style="color: #000080;">=</span>ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>is<span style="color: #008000;">&#91;</span>pos<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> rs<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> strtoupper<span style="color: #008000;">&#40;</span>ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">else</span> rs<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
            pos<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
        pos <span style="color: #000040;">+</span><span style="color: #000080;">=</span> search.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> join<span style="color: #008000;">&#40;</span>replace, rs<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***************
 * string str_repeat ( string input, int multiplier )
 * 
 * Returns input_str repeated multiplier times. 
 * multiplier has to be greater than or equal to 0. 
 * If the multiplier is set to 0, the function will return an empty string. 
 */</span>   
string str_repeat<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>input, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>mult<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>mult<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        s <span style="color: #000040;">+</span><span style="color: #000080;">=</span> input<span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***************
 * string str_shuffle ( string str )
 * 
 * str_shuffle() shuffles a string.
 */</span>
string str_shuffle<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
    ints subscripts<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> subscripts<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> i<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>subscripts.<span style="color: #007788;">empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">srand</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">time</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">int</span> r <span style="color: #000080;">=</span> <span style="color: #0000dd;">rand</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">%</span> subscripts.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        s <span style="color: #000040;">+</span><span style="color: #000080;">=</span> str<span style="color: #008000;">&#91;</span>subscripts<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
        subscripts.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>subscripts<span style="color: #008000;">&#91;</span>r<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span> 
&nbsp;
<span style="color: #ff0000; font-style: italic;">/***************
 * int str_word_count(string string)
 *
 * Counts the number of words inside string.
 */</span> 
<span style="color: #0000ff;">int</span> str_word_count<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    strings ss <span style="color: #000080;">=</span> split<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &quot;</span>, str<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">!</span><span style="color: #000080;">=</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> count<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> count<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/****************
 * string strstr ( string haystack, string needle )
 * 
 * Returns part of haystack string from the first occurrence of needle to the end of haystack. 
 */</span>
string <span style="color: #0000dd;">strstr</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>haystack, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> haystack.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span>haystack.<span style="color: #007788;">find_first_of</span><span style="color: #008000;">&#40;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
string <span style="color: #0000dd;">strchr</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>haystack, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">strstr</span><span style="color: #008000;">&#40;</span>haystack, needle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 * int stripos ( string haystack, string needle)
 *
 * stripos --  Find position of first occurrence of a case-insensitive string 
 */</span>    
sint stripos<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>haystack, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> strtolower<span style="color: #008000;">&#40;</span>haystack<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">find_first_of</span><span style="color: #008000;">&#40;</span>strtolower<span style="color: #008000;">&#40;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 * int strlen ( string string )\
 * 
 * Returns the length of the given string.
 */</span>
sint <span style="color: #0000dd;">strlen</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>  
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 * int strpos ( string haystack, string needle)
 *
 * strpos --  Find position of first occurrence of a string 
 */</span>    
sint strpos<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>haystack, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> haystack.<span style="color: #007788;">find_first_of</span><span style="color: #008000;">&#40;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 * int strrchr ( string haystack, string needle)
 *
 * strrchr --  Find position of last occurrence of a string 
 */</span>    
sint <span style="color: #0000dd;">strrchr</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>haystack, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> haystack.<span style="color: #007788;">find_last_of</span><span style="color: #008000;">&#40;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 * string strrev ( string string )
 * 
 * Returns string, reversed. 
 */</span>   
string strrev<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    string s <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span>str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&gt;=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #666666;">// type of i here must be int, not sint(string::size_type), </span>
    <span style="color: #666666;">// because the last i is -1</span>
        s <span style="color: #000040;">+</span><span style="color: #000080;">=</span> str<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 * int strripos ( string haystack, string needle)
 *
 * strripos --  Find position of last occurrence of a case-insensitive string 
 */</span>    
sint strripos<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>haystack, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> strtolower<span style="color: #008000;">&#40;</span>haystack<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">find_last_of</span><span style="color: #008000;">&#40;</span>strtolower<span style="color: #008000;">&#40;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*****************
 * int strrpos ( string haystack, string needle)
 *
 * strrpos --  Find position of last occurrence of a string 
 */</span>    
sint strrpos<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>haystack, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> haystack.<span style="color: #007788;">find_last_of</span><span style="color: #008000;">&#40;</span>needle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">//for int</span>
string num2str<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>num, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>format <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;%d&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
<span style="color: #ff0000; font-style: italic;">/*    int temp = num;
    string str = &quot;&quot;;
    string flag; 
    if( temp==0 ) return &quot;0&quot;;
    flag = temp&lt;0 ? &quot;-&quot; : &quot;&quot;;
    temp = abs(temp);
    while( temp!=0 ){
        str = char( int(temp % 10)+48 ) + str;
        temp = (int)temp/10;
    }
    return flag+str;
*/</span>
    <span style="color: #0000ff;">char</span> s<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">32</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">sprintf</span><span style="color: #008000;">&#40;</span>s, format.<span style="color: #007788;">c_str</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> string<span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">// for float</span>
string num2str<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span>num, <span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>format <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;%f&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
<span style="color: #ff0000; font-style: italic;">/*    int ipart = (int)num;
    double fpart = num - (double)ipart;
    cout &lt;&lt; fpart &lt;&lt; endl;
    if( ipart&lt;0 ) fpart = -fpart;
    string s = num2str(ipart);
    s += &quot;.&quot;;
    s += num2str((int)(fpart*pow(10,(double)fracdigital)));
    return s;
*/</span>
    <span style="color: #0000ff;">char</span> s<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">32</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #0000dd;">sprintf</span><span style="color: #008000;">&#40;</span>s, format.<span style="color: #007788;">c_str</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, num<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> string<span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*************
 * string left(string str, int n)
 *
 * return a string containing left n chars of str
 */</span>   
string left<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>n<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> str.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*************
 * string right(string str, int n)
 *
 * return a string containing right n chars of str
 */</span>   
string right<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>n<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> str.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span>str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*************
 * string substr(string str, int pos[, int n])
 *
 * return a string containing n chars from pos of str
 */</span>  
string substr<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>pos, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>n<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span> p <span style="color: #000080;">=</span> pos, s <span style="color: #000080;">=</span> str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> p<span style="color: #000080;">&lt;=</span><span style="color: #000040;">-</span>s <span style="color: #000040;">||</span> p<span style="color: #000080;">&gt;=</span>s <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Warning: substr: invalid parameter pos &quot;</span> 
             <span style="color: #000080;">&lt;&lt;</span> p <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;, str.size() = &quot;</span> 
             <span style="color: #000080;">&lt;&lt;</span> s <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> p<span style="color: #000080;">&lt;</span><span style="color: #0000dd;">0</span> <span style="color: #008000;">&#41;</span> p <span style="color: #000040;">+</span><span style="color: #000080;">=</span> s<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> str.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span>p,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
string substr<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>pos<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> substr<span style="color: #008000;">&#40;</span>str,pos,str.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>pos<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
string mid<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>pos, <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #000040;">&amp;</span>n<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">return</span> substr<span style="color: #008000;">&#40;</span>str,pos,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/*************
 * double str2num(const string &amp;str)
 *
 * convert a string to a double 
 */</span>   
<span style="color: #0000ff;">double</span> str2num<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> string <span style="color: #000040;">&amp;</span>str<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
    strings ss <span style="color: #000080;">=</span> split<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;.&quot;</span>,str<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">bool</span> flag <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> s <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span>.<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000dd;">cerr</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;Warning: str2num: too many points in &quot;</span> <span style="color: #000080;">&lt;&lt;</span> str <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;, preserve the first one.&quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> ss<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> left<span style="color: #008000;">&#40;</span>ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">&quot;-&quot;</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        flag <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
        ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> left<span style="color: #008000;">&#40;</span>ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>,<span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #FF0000;">&quot;+&quot;</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span> 
        ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    string ss0 <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>string<span style="color: #008080;">::</span><span style="color: #007788;">size_type</span> i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">isdigit</span><span style="color: #008000;">&#40;</span>ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> ss0 <span style="color: #000040;">+</span><span style="color: #000080;">=</span> ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>ss0.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">isdigit</span><span style="color: #008000;">&#40;</span>ss0<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> s <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>ss0<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">48</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">pow</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">10</span>.,<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span>ss0.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>i<span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>ss.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">int</span> n <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span>sint i<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i<span style="color: #000080;">&lt;</span>ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">isdigit</span><span style="color: #008000;">&#40;</span>ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> s <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>ss<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">48</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #0000dd;">pow</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">10</span>.,<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #000040;">-</span>n<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">else</span> n<span style="color: #000040;">--</span><span style="color: #008080;">;</span>
            n<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> flag<span style="color: #008080;">?</span>s<span style="color: #008080;">:</span><span style="color: #000040;">-</span>s<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #339900;">#endif</span></pre></div></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/04/22/%e5%b8%b8%e7%94%a8%e7%9a%84c%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%93%8d%e4%bd%9c%e5%87%bd%e6%95%b0/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>一种对带参数选项的参数的读取方法[C++]</title>
		<link>http://pwwang.com/2009/03/02/%e4%b8%80%e7%a7%8d%e5%af%b9%e5%b8%a6%e5%8f%82%e6%95%b0%e9%80%89%e9%a1%b9%e7%9a%84%e5%8f%82%e6%95%b0%e7%9a%84%e8%af%bb%e5%8f%96%e6%96%b9%e6%b3%95/</link>
		<comments>http://pwwang.com/2009/03/02/%e4%b8%80%e7%a7%8d%e5%af%b9%e5%b8%a6%e5%8f%82%e6%95%b0%e9%80%89%e9%a1%b9%e7%9a%84%e5%8f%82%e6%95%b0%e7%9a%84%e8%af%bb%e5%8f%96%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 08:15:14 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=526</guid>
		<description><![CDATA[题目写得有点拗口， 其实就是读取形如这样的参数行：

 ./XXX -i input -o output -l label 

这种方法可以不论参数选项的顺序（当然，input还是要跟在-i后面），并可以忽略错误的参数选项。

<span class="readmore"><a href="http://pwwang.com/2009/03/02/%e4%b8%80%e7%a7%8d%e5%af%b9%e5%b8%a6%e5%8f%82%e6%95%b0%e9%80%89%e9%a1%b9%e7%9a%84%e5%8f%82%e6%95%b0%e7%9a%84%e8%af%bb%e5%8f%96%e6%96%b9%e6%b3%95/" title="一种对带参数选项的参数的读取方法[C++]">Read More: 222 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>题目写得有点拗口， 其实就是读取形如这样的参数行：</p>
<blockquote><p> ./XXX -i input -o output -l label </p></blockquote>
<p>这种方法可以不论参数选项的顺序（当然，input还是要跟在-i后面），并可以忽略错误的参数选项。</p>
<p>这个是C++的版本，其他语言版本可以依次类推。</p>
<p><span id="more-526"></span></p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">bool</span> parseCommandLine<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span> argv<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">int</span> argct <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
    string temp<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>argc<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>   <span style="color: #666666;">// 没有给出参数的时候给出一些程序的说明</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;n  -- XXX programs --n&quot;</span><span style="color: #008080;">;</span>               
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  给出你程序的信息和说明nn&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  程序各参数的意义:n&quot;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  -i &lt;file&gt;      Input filen&quot;</span><span style="color: #008080;">;</span>  
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  -o &lt;file&gt;      Output filen&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  -l &lt;label&gt;     Label for this runn&quot;</span><span style="color: #008080;">;</span> 
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;n&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  程序的用法:n&quot;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  ./XXX -i inputn&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  ./XXX -i input -o outputn&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;  ./XXX -i input -o output -l firstn&quot;</span><span style="color: #008080;">;</span>                       
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot;n&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span> 
    <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span>       <span style="color: #666666;">// 进行参数选项和参数的读取</span>
        <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>argct <span style="color: #000080;">&lt;</span> argc<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
            temp <span style="color: #000080;">=</span> argv<span style="color: #008000;">&#91;</span>argct<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 存放参数选项(如-i,-o,-l)</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>temp <span style="color: #000080;">==</span> <span style="color: #FF0000;">&quot;-i&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        argct<span style="color: #000040;">++</span><span style="color: #008080;">;</span>         <span style="color: #666666;">//从参数选项指向参数</span>
        ioparm.<span style="color: #007788;">input</span> <span style="color: #000080;">=</span> argv<span style="color: #008000;">&#91;</span>argct<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//将读取的参数存入全局变量中</span>
        <span style="color: #666666;">// 可以对参数进行检测,如果不符合要求就直接return false.</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>temp <span style="color: #000080;">==</span> <span style="color: #FF0000;">&quot;-o&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        argct<span style="color: #000040;">++</span><span style="color: #008080;">;</span> 
        ioparm.<span style="color: #007788;">output</span> <span style="color: #000080;">=</span> argv<span style="color: #008000;">&#91;</span>argct<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>temp <span style="color: #000080;">==</span> <span style="color: #FF0000;">&quot;-l&quot;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        argct<span style="color: #000040;">++</span><span style="color: #008080;">;</span> 
        ioparm.<span style="color: #007788;">label</span> <span style="color: #000080;">=</span> argv<span style="color: #008000;">&#91;</span>argct<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span> 
        <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; Warning: ignored argument &quot;</span> <span style="color: #000080;">&lt;&lt;</span> argct <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; : &quot;</span> <span style="color: #000080;">&lt;&lt;</span> temp <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
        <span style="color: #666666;">// 如果不是给定的参数选项,则忽略这一个参数,如:</span>
        <span style="color: #666666;">// ./XXX -i input -t a -o output  这里的 -t 和 a将被逐个忽略</span>
        <span style="color: #008000;">&#125;</span>
            argct<span style="color: #000040;">++</span><span style="color: #008080;">;</span>            <span style="color: #666666;">//指向下一个参数选项</span>
        <span style="color: #008000;">&#125;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #666666;">//读完了之后可以对必须的参数予以检测, 如:</span>
    <span style="color: #666666;">//或者在上面读取的时候就可以检测, 如果不符合要求就直接return false</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ioparm.<span style="color: #007788;">input</span>.<span style="color: #007788;">empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> <span style="color: #FF0000;">&quot; Error: argument &quot;</span><span style="color: #000040;">-</span>i<span style="color: #FF0000;">&quot; is essential. &quot;</span> <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/03/02/%e4%b8%80%e7%a7%8d%e5%af%b9%e5%b8%a6%e5%8f%82%e6%95%b0%e9%80%89%e9%a1%b9%e7%9a%84%e5%8f%82%e6%95%b0%e7%9a%84%e8%af%bb%e5%8f%96%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>C++标准库string类型的操作总结</title>
		<link>http://pwwang.com/2009/01/06/c%e6%a0%87%e5%87%86%e5%ba%93string%e7%b1%bb%e5%9e%8b%e7%9a%84%e6%93%8d%e4%bd%9c/</link>
		<comments>http://pwwang.com/2009/01/06/c%e6%a0%87%e5%87%86%e5%ba%93string%e7%b1%bb%e5%9e%8b%e7%9a%84%e6%93%8d%e4%bd%9c/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 16:04:26 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=418</guid>
		<description><![CDATA[&#160;

总结一下C++中string的操作，来自〈C++ Primer〉第四版。

1. string对象的定义和初始化:

<span class="readmore"><a href="http://pwwang.com/2009/01/06/c%e6%a0%87%e5%87%86%e5%ba%93string%e7%b1%bb%e5%9e%8b%e7%9a%84%e6%93%8d%e4%bd%9c/" title="C++标准库string类型的操作总结">Read More: 2918 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>总结一下C++中string的操作，来自〈C++ Primer〉第四版。</p>
<p><strong>1. string对象的定义和初始化:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">string s1<span style="color: #008080;">;</span>         <span style="color: #666666;">//空串</span>
string s2<span style="color: #008000;">&#40;</span>s1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         <span style="color: #666666;">//将s2初始化为s1的一个副本</span>
string s3<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;value&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//s3初始化并赋值</span>
string s4<span style="color: #008000;">&#40;</span>n,<span style="color: #FF0000;">&quot;c&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//s4初始化,赋值为n个'c'</span>
string s5<span style="color: #008000;">&#40;</span>b,e<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">//初始化s5为迭代器b,e范围内的副本</span>
string s6<span style="color: #008000;">&#40;</span>cp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">//用c风格的字符串初始化</span>
string s7<span style="color: #008000;">&#40;</span>cp,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//cp前n个元素的副本</span>
string s8<span style="color: #008000;">&#40;</span>s2,pos2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//s8为s2从pos2开始到结尾的副本</span>
string s9<span style="color: #008000;">&#40;</span>s2,pos2,len2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//同上,不过的长度为len2(不超过s2的长度)</span>
<span style="color: #666666;">//其中有一种方法需要注意:</span>
<span style="color: #0000ff;">char</span> no_null<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">'H'</span>,<span style="color: #FF0000;">'i'</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
string s10<span style="color: #008000;">&#40;</span>no_null<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//错误,不是以null结尾的串</span>
string s10<span style="color: #008000;">&#40;</span>no_null,<span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//ok,可以自动添加null结尾</span></pre></div></div>

<p><span id="more-418"></span></p>
<p><strong>2. string的读写:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">string s<span style="color: #008080;">;</span>
<span style="color: #0000dd;">cin</span> <span style="color: #000080;">&gt;&gt;</span> s<span style="color: #008080;">;</span>
<span style="color: #0000dd;">cout</span> <span style="color: #000080;">&lt;&lt;</span> s <span style="color: #000080;">&lt;&lt;</span> endl<span style="color: #008080;">;</span>
<span style="color: #666666;">//注意,cin是会被空白符截断的</span>
<span style="color: #666666;">//要得到整行输入,采用while循环,或者:</span>
getline<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">cin</span>,s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p><strong>3.string的操作:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">s.<span style="color: #007788;">empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//判断s是否为空,相当于s.size()==0</span>
s.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//s的长度</span>
s<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>        <span style="color: #666666;">//n位置的字符(左值返回)</span>
s1<span style="color: #000040;">+</span>s2<span style="color: #008080;">;</span>        <span style="color: #666666;">//返回s1和s2连接的串</span>
s1<span style="color: #000080;">=</span>s2<span style="color: #008080;">;</span>        <span style="color: #666666;">//把s1替换为s2的副本</span>
s1<span style="color: #000080;">==</span>s2<span style="color: #008080;">;</span>        <span style="color: #666666;">//判断s1,s2是否相等</span>
<span style="color: #000040;">!</span><span style="color: #000080;">=</span>,<span style="color: #000080;">&lt;</span>,<span style="color: #000080;">&lt;=</span>,<span style="color: #000080;">&gt;</span>,<span style="color: #000080;">&gt;=</span>    <span style="color: #666666;">//按字典顺序比较</span>
<span style="color: #666666;">//==================</span>
s.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>p,t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//在迭代器p指向的元素前插入t,返回指向t的迭代器</span>
s.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>p,n,t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//同上,插入n个t,返回void</span>
s.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>p,b,e<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//插入迭代器b,e间的元素,返回void</span>
s.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pos,n,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//在pos前插入n个字符c,返回s的引用</span>
s.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pos,s2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//在pos前插入s2,返回s的引用</span>
s.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pos,s2,pos2,len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
<span style="color: #666666;">//在pos前插入s2中从pos2开始的len个字符,返回s的引用</span>
s.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pos,cp,len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #666666;">//pos前插入cp数组(c风格字串)的前len个字符,返回s的引用</span>
s.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span>pos,cp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//在pos前插入cp,返回s的引用</span>
<span style="color: #666666;">//==================</span>
s.<span style="color: #007788;">assign</span><span style="color: #008000;">&#40;</span>b,e<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//用b,e间的元素替换s,返回s</span>
s.<span style="color: #007788;">assign</span><span style="color: #008000;">&#40;</span>n,t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//用n个t替换s,返回s</span>
s.<span style="color: #007788;">assign</span><span style="color: #008000;">&#40;</span>s2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//用s2的副本替换s,返回s的引用</span>
s.<span style="color: #007788;">assign</span><span style="color: #008000;">&#40;</span>s2,pos2,len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #666666;">//用s2从pos2开始的len长的副本替换s,返回s的引用</span>
s.<span style="color: #007788;">assign</span><span style="color: #008000;">&#40;</span>cp,len<span style="color: #008000;">&#41;</span><span style="color: #666666;">//用cp的前len个字符副本替换s,返回s的引用</span>
s.<span style="color: #007788;">assign</span><span style="color: #008000;">&#40;</span>cp<span style="color: #008000;">&#41;</span>    <span style="color: #666666;">//用cp的副本替换s,返回s的引用</span>
<span style="color: #666666;">//==================</span>
s.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//删除迭代器p指向的元素,返回指向后一个元素的迭代器</span>
s.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>b,e<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//删除b,e间的元素,返回值同上</span>
s.<span style="color: #007788;">erase</span><span style="color: #008000;">&#40;</span>pos,len<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//删除从pos开始的len个字符,返回s的引用</span>
<span style="color: #666666;">//==================</span>
s.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span>pos,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//返回s中从pos开始的n个字符组成的串</span>
s.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span>pos<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//返回s中从pos开始到结尾的串</span>
s.<span style="color: #007788;">substr</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//返回s的副本</span>
<span style="color: #666666;">//==================</span>
s.<span style="color: #007788;">append</span><span style="color: #008000;">&#40;</span>args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//将args串接在s的后面,返回s的引用</span>
<span style="color: #666666;">//==================</span>
s.<span style="color: #007788;">replace</span><span style="color: #008000;">&#40;</span>pos,len,args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #666666;">//删除s中从pos开始的len个字符,用args串替换,返回s的引用</span>
<span style="color: #666666;">//args不能为b2,e2</span>
s.<span style="color: #007788;">replace</span><span style="color: #008000;">&#40;</span>b,e,args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #666666;">//删除迭代器b,e范围内的字符,用args替换,返回s的引用</span>
<span style="color: #666666;">//args不能为s2,pos2,len2</span>
<span style="color: #666666;">//==================append,replace的args的说明</span>
s2        <span style="color: #666666;">//string</span>
s2,pos2,len2    <span style="color: #666666;">//s2中下pos2开始的len2个字符</span>
cp        <span style="color: #666666;">//c风格的串</span>
cp,len2        <span style="color: #666666;">//cp指向以空结束的前len2个字符</span>
n,c        <span style="color: #666666;">//字符c的n个副本</span>
b2,e2        <span style="color: #666666;">//迭代器b2,e2范围内的所有字符</span></pre></div></div>

<p><strong>4.string的查找操作:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">s.<span style="color: #007788;">find</span><span style="color: #008000;">&#40;</span>args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//args的第一次出现</span>
s.<span style="color: #007788;">rfind</span><span style="color: #008000;">&#40;</span>args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//最后一次出现</span>
s.<span style="color: #007788;">find_first_of</span><span style="color: #008000;">&#40;</span>args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//args中任意字符的第一次出现</span>
s.<span style="color: #007788;">find_last_of</span><span style="color: #008000;">&#40;</span>args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//args中任意字符的最后一次出现</span>
s.<span style="color: #007788;">find_first_not_of</span><span style="color: #008000;">&#40;</span>args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//查找第一个不属于args的字符</span>
s.<span style="color: #007788;">find_last_not_of</span><span style="color: #008000;">&#40;</span>args<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//查找最后一个不属于args的字符</span>
<span style="color: #666666;">//=================args</span>
c,pos<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>        <span style="color: #666666;">//查找字符c,默认从s的0位置开始</span>
s2,pos<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>    <span style="color: #666666;">//查找s2</span>
cp,pos<span style="color: #000080;">=</span><span style="color: #0000dd;">0</span>    <span style="color: #666666;">//查找cp(c风格字串)</span>
cp,pos,n    <span style="color: #666666;">//从s的pos开始查找cp的前n个字符,没有默认值</span></pre></div></div>

<p><strong>5.string的比较:</strong></p>
<p>除了刚才提到的等号及不等号的比较,c++还提供了一个比较函数compare</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">s.<span style="color: #007788;">compare</span><span style="color: #008000;">&#40;</span>s2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//比较s和s2</span>
s.<span style="color: #007788;">compare</span><span style="color: #008000;">&#40;</span>pos1,n1,s2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//s从pos1开始的n1个字符与s2比较</span>
s.<span style="color: #007788;">compare</span><span style="color: #008000;">&#40;</span>pos1,n1,s2,pos2,n2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #666666;">//s从pos1开始的n1个字符与s2从pos2开始的n2个字符比较</span>
s.<span style="color: #007788;">compare</span><span style="color: #008000;">&#40;</span>cp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//比较s和cp</span>
s.<span style="color: #007788;">compare</span><span style="color: #008000;">&#40;</span>pos1,n1,cp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//s从pos1开始的n1个字符与cp比较</span>
s.<span style="color: #007788;">compare</span><span style="color: #008000;">&#40;</span>pos1,n1,cp,n2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//s从pos1开始的n1个字符与cp的前n2个字符比较</span>
<span style="color: #666666;">//compare的返回值: &gt;0 s大; &lt;0 s小; =0 二者相等</span></pre></div></div>

<p><strong>6.cctype提供的字符判断函数:</strong></p>
<p>需要包含头文件: #include&lt;cctype&gt;</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000dd;">isalnum</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是数字或字母</span>
<span style="color: #0000dd;">isalpha</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是字母</span>
<span style="color: #0000dd;">iscntrl</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是控制字符</span>
<span style="color: #0000dd;">isdigit</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是数字</span>
<span style="color: #0000dd;">isgraph</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 不是空格但可打印</span>
<span style="color: #0000dd;">islower</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是标点符号</span>
<span style="color: #0000dd;">isprint</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是空白字符</span>
<span style="color: #0000dd;">ispunct</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是大写字母</span>
<span style="color: #0000dd;">isspace</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是空白字符</span>
<span style="color: #0000dd;">isupper</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是大写字符</span>
<span style="color: #0000dd;">isxdigit</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//true if c 是十六进制数</span>
<span style="color: #0000dd;">tolower</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//将c转换为小写</span>
<span style="color: #0000dd;">toupper</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    <span style="color: #666666;">//将c转换为大写</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2009/01/06/c%e6%a0%87%e5%87%86%e5%ba%93string%e7%b1%bb%e5%9e%8b%e7%9a%84%e6%93%8d%e4%bd%9c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>操作pdb文件的类C++版</title>
		<link>http://pwwang.com/2008/11/25/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/</link>
		<comments>http://pwwang.com/2008/11/25/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 16:47:49 +0000</pubDate>
		<dc:creator>pwwang</dc:creator>
				<category><![CDATA[BIO]]></category>
		<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://pwwang.com/?p=18</guid>
		<description><![CDATA[有时候总需要对一些pdb文件进行操作，特别是读数据，所以就写了这个库文件但是这个只是个比较粗略的，一时也不能补得很全，只是仅仅对ATOM的行进行了操作并进行了归类，其他的行暂时还没有进行操作，这些等到实际用到时，再进行补充吧 另外，关于atom_id和chain_id发现有些不是整型，因为在x-ray或者mnr测结构时无法确定而加的abcd之类的也没有考虑在内，如果要考虑这个的话，我想是否可以用map将id与整个原子的信息对应起来。 代码



#ifndef _PDB_H_  

<span class="readmore"><a href="http://pwwang.com/2008/11/25/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/" title="操作pdb文件的类C++版">Read More: 1865 Words Totally</a></span>]]></description>
			<content:encoded><![CDATA[<p>有时候总需要对一些pdb文件进行操作，特别是读数据，所以就写了这个库文件但是这个只是个比较粗略的，一时也不能补得很全，只是仅仅对ATOM的行进行了操作并进行了归类，其他的行暂时还没有进行操作，这些等到实际用到时，再进行补充吧 另外，关于atom_id和chain_id发现有些不是整型，因为在x-ray或者mnr测结构时无法确定而加的abcd之类的也没有考虑在内，如果要考虑这个的话，我想是否可以用map将id与整个原子的信息对应起来。 代码</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#ifndef _PDB_H_  </span>
<span style="color: #339933;">#define _PDB_H_ </span>
&nbsp;
<span style="color: #339933;">#include&lt;iostream&gt; </span>
<span style="color: #339933;">#include&lt;fstream&gt; </span>
<span style="color: #339933;">#include&lt;cstdio&gt; </span>
<span style="color: #339933;">#include&lt;string&gt;  </span>
<span style="color: #339933;">#include&lt;vector&gt;  </span>
&nbsp;
<span style="color: #339933;">#define atoms vector&lt;atom&gt;  </span>
<span style="color: #339933;">#define chains vector&lt;chain&gt;  </span>
<span style="color: #339933;">#define aint vector&lt;atom&gt;::size_type  </span>
<span style="color: #339933;">#define cint vector&lt;chain&gt;::size_type   </span>
&nbsp;
using namespace std<span style="color: #339933;">;</span>   
&nbsp;
class atom<span style="color: #009900;">&#123;</span>   
private<span style="color: #339933;">:</span>   
    <span style="color: #993333;">short</span> atom_id<span style="color: #339933;">;</span>   
    string atom_nick<span style="color: #339933;">;</span>   
    string atom_res<span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> atom_chain<span style="color: #339933;">;</span>   
    <span style="color: #993333;">short</span> atom_res_id<span style="color: #339933;">;</span>   
    <span style="color: #993333;">float</span> atom_x<span style="color: #339933;">,</span> atom_y<span style="color: #339933;">,</span> atom_z<span style="color: #339933;">,</span> atom_w<span style="color: #339933;">,</span> atom_bfactor<span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> atom_name<span style="color: #339933;">;</span>   
&nbsp;
public<span style="color: #339933;">:</span>   
    atom<span style="color: #009900;">&#40;</span><span style="color: #993333;">short</span><span style="color: #339933;">,</span> string<span style="color: #339933;">,</span> string<span style="color: #339933;">,</span> <span style="color: #993333;">char</span><span style="color: #339933;">,</span> <span style="color: #993333;">short</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">float</span><span style="color: #339933;">,</span> <span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom<span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    string line<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
atom<span style="color: #339933;">::</span><span style="color: #202020;">atom</span><span style="color: #009900;">&#40;</span> <span style="color: #993333;">short</span> a_id<span style="color: #339933;">,</span>   
            string a_nick<span style="color: #339933;">,</span>   
            string r<span style="color: #339933;">,</span>   
            <span style="color: #993333;">char</span> c<span style="color: #339933;">,</span>   
            <span style="color: #993333;">short</span> r_id<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> a_x<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> a_y<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> a_z<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> a_w<span style="color: #339933;">,</span>   
            <span style="color: #993333;">float</span> b<span style="color: #339933;">,</span>   
            <span style="color: #993333;">char</span> a_name<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    atom_id <span style="color: #339933;">=</span> a_id<span style="color: #339933;">;</span>   
    atom_nick <span style="color: #339933;">=</span> a_nick<span style="color: #339933;">;</span>   
    atom_res <span style="color: #339933;">=</span> r<span style="color: #339933;">;</span>   
    atom_chain <span style="color: #339933;">=</span> c<span style="color: #339933;">;</span>   
    atom_res_id <span style="color: #339933;">=</span> r_id<span style="color: #339933;">;</span>   
    atom_x <span style="color: #339933;">=</span> a_x<span style="color: #339933;">;</span>   
    atom_y <span style="color: #339933;">=</span> a_y<span style="color: #339933;">;</span>   
    atom_z <span style="color: #339933;">=</span> a_z<span style="color: #339933;">;</span>   
    atom_w <span style="color: #339933;">=</span> a_w<span style="color: #339933;">;</span>   
    atom_bfactor <span style="color: #339933;">=</span> b<span style="color: #339933;">;</span>   
    atom_name <span style="color: #339933;">=</span> a_name<span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
atom<span style="color: #339933;">::</span><span style="color: #202020;">atom</span><span style="color: #009900;">&#40;</span>string l<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    atom_id <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_nick <span style="color: #339933;">=</span> l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">13</span><span style="color: #339933;">,</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_res <span style="color: #339933;">=</span> l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">17</span><span style="color: #339933;">,</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_chain <span style="color: #339933;">=</span> l<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">21</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
    atom_res_id <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">22</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_x <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">30</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_y <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">38</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_z <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">46</span><span style="color: #339933;">,</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_w <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">54</span><span style="color: #339933;">,</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_bfactor <span style="color: #339933;">=</span> atof<span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">60</span><span style="color: #339933;">,</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#41;</span>.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom_name <span style="color: #339933;">=</span> l.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #0000dd;">77</span> <span style="color: #339933;">?</span> l<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">77</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">' '</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
string atom<span style="color: #339933;">::</span><span style="color: #202020;">line</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #993333;">char</span> line<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">255</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>sprintf<span style="color: #009900;">&#40;</span>  line<span style="color: #339933;">,</span>   
                    <span style="color: #ff0000;">&quot;ATOM  %5u  %-3s %-3s %c%4u    %8.3f%8.3f%8.3f%6.2f%6.2f           %c&quot;</span><span style="color: #339933;">,</span>   
                    atom_id<span style="color: #339933;">,</span>   
                    atom_nick.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>   
                    atom_res.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>   
                    atom_chain<span style="color: #339933;">,</span>   
                    atom_res_id<span style="color: #339933;">,</span>   
                    atom_x<span style="color: #339933;">,</span>   
                    atom_y<span style="color: #339933;">,</span>   
                    atom_z<span style="color: #339933;">,</span>   
                    atom_w<span style="color: #339933;">,</span>   
                    atom_bfactor<span style="color: #339933;">,</span>   
                    atom_name<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">return</span> string<span style="color: #009900;">&#40;</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//===============================================   </span>
class chain<span style="color: #009900;">&#123;</span>   
private<span style="color: #339933;">:</span>   
    atoms chain_atms<span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> chain_label<span style="color: #339933;">;</span>   
public<span style="color: #339933;">:</span>   
    chain<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #993333;">void</span> addAtom<span style="color: #009900;">&#40;</span>atom<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #993333;">void</span> saveToFile<span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    aint size<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> label<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    atom operator<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>aint<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
chain<span style="color: #339933;">::</span><span style="color: #202020;">chain</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> l<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> chain_label <span style="color: #339933;">=</span> l<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>   
&nbsp;
aint chain<span style="color: #339933;">::</span><span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">return</span> chain_atms.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
atom chain<span style="color: #339933;">::</span><span style="color: #202020;">operator</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>aint i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">0</span> and i<span style="color: #339933;">&lt;</span>chain_atms.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>   
        <span style="color: #b1b100;">return</span> chain_atms<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #993333;">char</span> chain<span style="color: #339933;">::</span><span style="color: #202020;">label</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">return</span> chain_label<span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #993333;">void</span> chain<span style="color: #339933;">::</span><span style="color: #202020;">addAtom</span><span style="color: #009900;">&#40;</span>atom a<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    chain_atms.<span style="color: #202020;">push_back</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #993333;">void</span> chain<span style="color: #339933;">::</span><span style="color: #202020;">saveToFile</span><span style="color: #009900;">&#40;</span>string f<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    ofstream in<span style="color: #009900;">&#40;</span>f.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>cint i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>chain_atms.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
        in <span style="color: #339933;">&lt;&lt;</span> chain_atms<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">line</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;&lt;</span> endl<span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
    in <span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot;TER&quot;</span> <span style="color: #339933;">&lt;&lt;</span> endl<span style="color: #339933;">;</span>   
    in.<span style="color: #202020;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//===============================================   </span>
class pdb<span style="color: #009900;">&#123;</span>   
private<span style="color: #339933;">:</span>   
    chains pdb_chns<span style="color: #339933;">;</span>   
&nbsp;
public<span style="color: #339933;">:</span>   
    pdb<span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    cint size<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    chain operator<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>cint<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
cint pdb<span style="color: #339933;">::</span><span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">return</span> pdb_chns.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
chain pdb<span style="color: #339933;">::</span><span style="color: #202020;">operator</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span>cint i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">&gt;=</span><span style="color: #0000dd;">0</span> and i<span style="color: #339933;">&lt;</span>pdb_chns.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> pdb_chns<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
pdb<span style="color: #339933;">::</span><span style="color: #202020;">pdb</span><span style="color: #009900;">&#40;</span>string pdbfile<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    string l<span style="color: #339933;">;</span>   
    <span style="color: #993333;">char</span> flag<span style="color: #339933;">,</span> chain_label<span style="color: #339933;">;</span>   
    ifstream out1<span style="color: #009900;">&#40;</span>pdbfile.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>getline<span style="color: #009900;">&#40;</span>out1<span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>    <span style="color: #666666; font-style: italic;">//get the chain labels first   </span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #ff0000;">&quot;ATOM&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
            chain_label <span style="color: #339933;">=</span> l<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">21</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>flag <span style="color: #339933;">!=</span> chain_label<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
                chain chn<span style="color: #009900;">&#40;</span>chain_label<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                pdb_chns.<span style="color: #202020;">push_back</span><span style="color: #009900;">&#40;</span>chn<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                flag <span style="color: #339933;">=</span> chain_label<span style="color: #339933;">;</span>   
            <span style="color: #009900;">&#125;</span>   
        <span style="color: #009900;">&#125;</span>   
    <span style="color: #009900;">&#125;</span>   
    out1.<span style="color: #202020;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    ifstream out2<span style="color: #009900;">&#40;</span>pdbfile.<span style="color: #202020;">c_str</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>getline<span style="color: #009900;">&#40;</span>out2<span style="color: #339933;">,</span> l<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>l.<span style="color: #202020;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #ff0000;">&quot;ATOM&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
            atom atm<span style="color: #009900;">&#40;</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
            chain_label <span style="color: #339933;">=</span> l<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">21</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>   
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>cint i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>pdb_chns.<span style="color: #202020;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
                <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>chain_label <span style="color: #339933;">==</span> pdb_chns<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">label</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>   
                    pdb_chns<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">addAtom</span><span style="color: #009900;">&#40;</span>atm<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
            <span style="color: #009900;">&#125;</span>   
        <span style="color: #009900;">&#125;</span>   
    <span style="color: #009900;">&#125;</span>   
    out2.<span style="color: #202020;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>  
<span style="color: #339933;">#endif</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/2008/11/25/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

