<?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, 02 Jul 2010 02:26:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>国外的C语言考题－“21减”游戏</title>
		<link>http://pwwang.com/technology/c-c-plus-plus-technology/foreign_c_test_21_minus/</link>
		<comments>http://pwwang.com/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td 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></td></tr></table></div>

</div>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/foreign_c_test_21_minus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>国外的C语言考题－滚梯</title>
		<link>http://pwwang.com/technology/c-c-plus-plus-technology/foreign_c_tests_elevator/</link>
		<comments>http://pwwang.com/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td 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></td></tr></table></div>

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

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td 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></td></tr></table></div>

<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/foreign_c_tests_elevator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>国外的C语言考题－二项式系数</title>
		<link>http://pwwang.com/technology/c-c-plus-plus-technology/foreign_c_tests_binomial_coefficient/</link>
		<comments>http://pwwang.com/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td 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></td></tr></table></div>

<p>&nbsp;&nbsp; </p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/foreign_c_tests_binomial_coefficient/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>国外的C语言考题－自动售货机</title>
		<link>http://pwwang.com/technology/c-c-plus-plus-technology/foreign_c_tests_autoseller/</link>
		<comments>http://pwwang.com/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td 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></td></tr></table></div>

<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/foreign_c_tests_autoseller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个扩展的C++数组的类</title>
		<link>http://pwwang.com/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/%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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
</pre></td><td 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></td></tr></table></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
</pre></td><td 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></td></tr></table></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/%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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
</pre></td><td 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:#800080;">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:#800080;">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:#800080;">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></td></tr></table></div>

<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/%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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td 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></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/%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/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td 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></td></tr></table></div>

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

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td 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></td></tr></table></div>

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

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
</pre></td><td 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></td></tr></table></div>

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

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td 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></td></tr></table></div>

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

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td 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></td></tr></table></div>

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

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td 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></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/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/technology/c-c-plus-plus-technology/%e6%93%8d%e4%bd%9cpdb%e6%96%87%e4%bb%b6%e7%9a%84%e7%b1%bb/</link>
		<comments>http://pwwang.com/technology/c-c-plus-plus-technology/%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与整个原子的信息对应起来。 代码



1

<span class="readmore"><a href="http://pwwang.com/technology/c-c-plus-plus-technology/%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"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
</pre></td><td 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>   
    <span style="color: #993333;">string</span> atom_nick<span style="color: #339933;">;</span>   
    <span style="color: #993333;">string</span> 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> <span style="color: #993333;">string</span><span style="color: #339933;">,</span> <span style="color: #993333;">string</span><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><span style="color: #993333;">string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #993333;">string</span> 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>   
            <span style="color: #993333;">string</span> a_nick<span style="color: #339933;">,</span>   
            <span style="color: #993333;">string</span> 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><span style="color: #993333;">string</span> 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;
<span style="color: #993333;">string</span> 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> <span style="color: #993333;">string</span><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><span style="color: #993333;">string</span><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><span style="color: #993333;">string</span> 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><span style="color: #993333;">string</span><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><span style="color: #993333;">string</span> pdbfile<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   
    <span style="color: #993333;">string</span> 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></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://pwwang.com/technology/c-c-plus-plus-technology/%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>
