<?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; TopCoder</title>
	<atom:link href="http://blog.liuhongwei.cn/tag/topcoder/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.liuhongwei.cn</link>
	<description>Agile, Startup, 产品管理, Google开发, iPhone开发</description>
	<lastBuildDate>Fri, 30 Jul 2010 10:31:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>TopCoder竞赛：C++, STL 用法快速入门</title>
		<link>http://blog.liuhongwei.cn/my-opensource/topcoder-cpp-stl/</link>
		<comments>http://blog.liuhongwei.cn/my-opensource/topcoder-cpp-stl/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 04:49:42 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[我的开源]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[STL]]></category>
		<category><![CDATA[TopCoder]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=66</guid>
		<description><![CDATA[2002年就开始参加TopCoder的算法竞赛。当时一周举行两次，每个房间12个人参加比赛，前三名都有现金奖励。有空参加一下，练练算法，给头脑保鲜。
下面总结了一些题目中常用的STL库的用法。

&#160;
#include &#60;algorithm&#62;
#include &#60;string&#62;
#include &#60;vector&#62;
#include &#60;map&#62;
#include &#60;iostream&#62;
&#160;
using namespace std;
&#160;
//递归
int GetN&#40;int n&#41;
&#123;
	if &#40;n==1&#41; return 1;
	else return GetN&#40;n-1&#41;;
&#125;
&#160;
void TestSTL_main&#40; int argc, char* argv&#91;&#93; &#41;
//void main( int argc, char* argv[] )
&#123;
	/******** STL **********/
&#160;
	//string的用法
	&#123;
		string s = &#34;mmmmm&#34;;
		string s2&#40;&#34;ss22&#34;&#41;;
		s2.insert&#40;2,&#34;kkkkk&#34;&#41;; //把&#34;kkkkk&#34;插到s2的第2个位置之前（位置从0开始）
		s2+=s+&#34;44444&#34;+'c';
		const char *pc = s.c_str&#40;&#41;;//把string转成C-style的string,以\0终了
		const char *ptr1 = s.data&#40;&#41;;;//把string转成字符串
		if &#40;s2&#91;2&#93; == 'k'&#41; s2&#91;2&#93;='C';
		s+=&#34;jkl&#34;;
		s+='m';
		s.push_back&#40;'\n'&#41;; //把'\n'（换行符）放在s的最后一个位置
		reverse&#40;s.begin&#40;&#41;, s.end&#40;&#41;&#41;; //反转
		basic_string &#60;char&#62;::iterator str_Iter; //遍历
		str_Iter = s.begin&#40;&#41;;
	&#125;
&#160;
	//vector的用法
	&#123;
		vector&#60;int&#62; v;
		v.push_back&#40;8&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>2002年就开始参加<a href="http://www.topcoder.com/">TopCoder</a>的算法竞赛。当时一周举行两次，每个房间12个人参加比赛，前三名都有现金奖励。有空参加一下，练练算法，给头脑保鲜。</p>
<p>下面总结了一些题目中常用的STL库的用法。</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">&nbsp;
<span style="color: #339900;">#include &lt;algorithm&gt;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
<span style="color: #339900;">#include &lt;vector&gt;</span>
<span style="color: #339900;">#include &lt;map&gt;</span>
<span style="color: #339900;">#include &lt;iostream&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//递归</span>
<span style="color: #0000ff;">int</span> GetN<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> n<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>n<span style="color: #000080;">==</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">else</span> <span style="color: #0000ff;">return</span> GetN<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span><span style="color: #0000dd;">1</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> TestSTL_main<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: #666666;">//void main( int argc, char* argv[] )</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #ff0000; font-style: italic;">/******** STL **********/</span>
&nbsp;
	<span style="color: #666666;">//string的用法</span>
	<span style="color: #008000;">&#123;</span>
		string s <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;mmmmm&quot;</span><span style="color: #008080;">;</span>
		string s2<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;ss22&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
		s2.<span style="color: #007788;">insert</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span>,<span style="color: #FF0000;">&quot;kkkkk&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//把&quot;kkkkk&quot;插到s2的第2个位置之前（位置从0开始）</span>
		s2<span style="color: #000040;">+</span><span style="color: #000080;">=</span>s<span style="color: #000040;">+</span><span style="color: #FF0000;">&quot;44444&quot;</span><span style="color: #000040;">+</span><span style="color: #FF0000;">'c'</span><span style="color: #008080;">;</span>
		<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>pc <span style="color: #000080;">=</span> s.<span style="color: #007788;">c_str</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #666666;">//把string转成C-style的string,以\0终了</span>
		<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">char</span> <span style="color: #000040;">*</span>ptr1 <span style="color: #000080;">=</span> s.<span style="color: #007788;">data</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;;</span><span style="color: #666666;">//把string转成字符串</span>
		<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s2<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: #FF0000;">'k'</span><span style="color: #008000;">&#41;</span> s2<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: #FF0000;">'C'</span><span style="color: #008080;">;</span>
		s<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #FF0000;">&quot;jkl&quot;</span><span style="color: #008080;">;</span>
		s<span style="color: #000040;">+</span><span style="color: #000080;">=</span><span style="color: #FF0000;">'m'</span><span style="color: #008080;">;</span>
		s.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//把'\n'（换行符）放在s的最后一个位置</span>
		reverse<span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, s.<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: #666666;">//反转</span>
		basic_string <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">char</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> str_Iter<span style="color: #008080;">;</span> <span style="color: #666666;">//遍历</span>
		str_Iter <span style="color: #000080;">=</span> s.<span style="color: #007788;">begin</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: #666666;">//vector的用法</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> v<span style="color: #008080;">;</span>
		v.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//向v中插入元素，元素的值是8</span>
		<span style="color: #0000ff;">int</span> iLen <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span>v.<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><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>iLen<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;">int</span> k <span style="color: #000080;">=</span> v<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: #666666;">//k==8</span>
		<span style="color: #008000;">&#125;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #666666;">//map的用法</span>
	<span style="color: #008000;">&#123;</span>
		map<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span> mp<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><span style="color: #0000dd;">3</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
		<span style="color: #008000;">&#123;</span>
			mp<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #000040;">*</span><span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> <span style="color: #666666;">//通过[第一个元素]来访问第二个元素</span>
		<span style="color: #008000;">&#125;</span>
&nbsp;
		<span style="color: #0000ff;">int</span> total <span style="color: #000080;">=</span> <span style="color: #0000dd;">100</span><span style="color: #008080;">;</span>
		map<span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> 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>
		<span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</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: #666666;">//遍历mp</span>
		<span style="color: #008000;">&#123;</span>
			total<span style="color: #000040;">+</span><span style="color: #000080;">=</span>it<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>second<span style="color: #008080;">;</span> <span style="color: #666666;">//通过iterator it来访问第二个元素</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;total=&quot;</span><span style="color: #000080;">&lt;&lt;</span>total<span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #666666;">//算法</span>
	<span style="color: #0000ff;">int</span> n <span style="color: #000080;">=</span> GetN<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">5</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//递归n!=n*(n-1)*(n-2)*…*1</span>
	<span style="color: #0000ff;">int</span> aa<span style="color: #000080;">=</span><span style="color: #0000dd;">10</span>,bb<span style="color: #000080;">=</span><span style="color: #0000dd;">15</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">int</span> maxi <span style="color: #000080;">=</span> max<span style="color: #008000;">&#40;</span>aa,bb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//最大值</span>
	<span style="color: #0000ff;">int</span> mini <span style="color: #000080;">=</span> min<span style="color: #008000;">&#40;</span>aa,bb<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//最小值</span>
	<span style="color: #0000ff;">int</span> absi <span style="color: #000080;">=</span> <span style="color: #0000dd;">abs</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span><span style="color: #0000dd;">12</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//绝对值</span>
	vector<span style="color: #000080;">&lt;</span>string<span style="color: #000080;">&gt;</span> v<span style="color: #008080;">;</span>
	v.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;hello&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	v.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;123&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	v.<span style="color: #007788;">push_back</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;no&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	sort<span style="color: #008000;">&#40;</span>v.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,v.<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: #666666;">//按照字母顺序，把v里面的元素排序</span>
	<span style="color: #0000ff;">int</span> savei<span style="color: #008080;">;</span>
	<span style="color: #0000dd;">sscanf</span><span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">c_str</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #FF0000;">&quot;%d&quot;</span>, <span style="color: #000040;">&amp;</span>savei<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//把字符串“123”转换成数字123</span>
	<span style="color: #0000dd;">cout</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;savei=&quot;</span><span style="color: #000080;">&lt;&lt;</span>savei<span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">char</span> buf<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">100</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000dd;">sprintf</span><span style="color: #008000;">&#40;</span>buf,<span style="color: #FF0000;">&quot;v[1]=%d&quot;</span>,savei<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">//把内容打印进字符串</span>
	<span style="color: #0000dd;">cout</span><span style="color: #000080;">&lt;&lt;</span><span style="color: #FF0000;">&quot;buf=&quot;</span><span style="color: #000080;">&lt;&lt;</span>buf<span style="color: #000080;">&lt;&lt;</span>endl<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #008000;">&#125;</span></pre></div></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/my-opensource/topcoder-cpp-stl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
