stabber 发表于 2007-9-22 10:08

泛型算法的问题 哪位给指点一下

<P>#include "stdafx.h"<BR>#include &lt;iostream&gt;<BR>using namespace std;<BR>#include &lt;fstream&gt;<BR>#include &lt;string&gt;<BR>#include &lt;algorithm&gt;                    <BR>#include &lt;vector&gt;                        <BR>typedef vector&lt;string&gt; VS;                <BR>                                        <BR>class PrintElem                            <BR>{                                        <BR>private:                                <BR>    int m_iLineLength;                    <BR>    int m_cnt;<BR>public:<BR>    PrintElem(int lineLen=8):m_iLineLength(lineLen),m_cnt(0)<BR>    {<BR>    }</P>
<P>    void operator()(const string&amp; elem)    //这个函数是什么意思,在本程序用谁调用了这个函数<BR>    {<BR>        ++m_cnt;<BR>        if((m_cnt%m_iLineLength)==0)<BR>            cout&lt;&lt;endl;<BR>        cout&lt;&lt;elem&lt;&lt;" ";<BR>    }<BR>};</P>
<P>class LessThan<BR>{<BR>public:<BR>    bool operator()(const string&amp; s1,const string&amp; s2)<BR>    {<BR>        return s1.size()&lt;s2.size();<BR>    }<BR>};</P>
<P>class GreaterThan<BR>{<BR>    int m_i;<BR>public:<BR>    GreaterThan(int sz=6):m_i(sz){}</P>
<P>    bool operator()(const string&amp; s)<BR>    {<BR>        return s.size()&gt;m_i;<BR>    }<BR>};</P>
<P>void process(vector&lt;VS&gt; *pvec)<BR>{<BR>    if(!pvec)<BR>    {<BR>        cout&lt;&lt;"这是谁啊,太不象话了"&lt;&lt;endl;<BR>        return;<BR>    }<BR>    //任务2,把多个vector拷成一个<BR>    vector&lt;string&gt; vsTexts;<BR>    vector&lt;VS&gt;::iterator iter;<BR>    for(iter=pvec-&gt;begin();iter!=pvec-&gt;end();++iter)<BR>        copy((*iter).begin(),(*iter).end(),back_inserter(vsTexts));<BR>    for_each(vsTexts.begin(),vsTexts.end (),PrintElem());    //这个函数是循环执行的吗 不明白它什么意思</P>
<P>    cout&lt;&lt;endl&lt;&lt;"------------------排序后--------------------"&lt;&lt;endl;<BR>    //任务3<BR>    sort(vsTexts.begin(),vsTexts.end ());<BR>    for_each(vsTexts.begin(),vsTexts.end (),PrintElem());    //为什么要在这儿执行PrintElem()</P>
<P>    cout&lt;&lt;endl&lt;&lt;"------------------任务4--------------------"&lt;&lt;endl;<BR>    vector&lt;string&gt;::iterator it;<BR>    it=unique(vsTexts.begin(),vsTexts.end ());<BR>    vsTexts.erase(it,vsTexts.end());           <BR>    for_each(vsTexts.begin(),vsTexts.end (),PrintElem());</P>
<P>    cout&lt;&lt;endl&lt;&lt;"------------------任务5--------------------"&lt;&lt;endl;<BR>    //用stable_sort,它保留相等元素的顺序<BR>    stable_sort(vsTexts.begin(),vsTexts.end (),LessThan());<BR>    for_each(vsTexts.begin(),vsTexts.end (),PrintElem());</P>
<P>    cout&lt;&lt;endl&lt;&lt;"------------------任务6--------------------"&lt;&lt;endl;<BR>    int cnt=0;<BR>    cnt=count_if(vsTexts.begin(),vsTexts.end (),GreaterThan());<BR>    cout&lt;&lt;"长度超过6个的单词为"&lt;&lt;cnt&lt;&lt;"个"&lt;&lt;endl;</P>
<P>    cout&lt;&lt;endl&lt;&lt;"------------------任务7--------------------"&lt;&lt;endl;<BR>    static string rm[]={"!",",",".",":"    };<BR>    vector&lt;string&gt; rVec(rm,rm+4);</P>
<P>    for(vector&lt;string&gt;::iterator it=rVec.begin();it!=rVec.end();++it)<BR>    {<BR>        int cnt=0;<BR>        cnt=count(vsTexts.begin(),vsTexts.end(),*it);    //这个函数什么意思<BR>        cout&lt;&lt;cnt&lt;&lt;"个实例被删除:"&lt;&lt;*it&lt;&lt;endl;<BR>        vsTexts.erase((remove(vsTexts.begin(),vsTexts.end(),*it)),vsTexts.end());<BR>    }</P>
<P>    for_each(vsTexts.begin(),vsTexts.end (),PrintElem());    <BR>}</P>
<P>void main()<BR>{<BR>//    //打开文件<BR>    string strF1,strF2;<BR>    cout&lt;&lt;"请输入文件名1:";<BR>    cin&gt;&gt;strF1;<BR>    cout&lt;&lt;"请输入文件名2:";<BR>    cin&gt;&gt;strF2;</P>
<P>    ifstream inFile1(strF1.c_str() );  <BR>    ifstream inFile2(strF2.c_str() );   </P>
<P>    //拷到vector中<BR>    vector&lt;string&gt; vT1,vT2;<BR>    istream_iterator&lt;string&gt; inIter1(inFile1),inIter2(inFile2),eos;  //不懂istream_iterator什么意思 还有eos是干什么的<BR>    copy(inIter1,eos,back_inserter(vT1));<BR>    copy(inIter2,eos,back_inserter(vT2));</P>
<P>    vector&lt;VS&gt; vSample;<BR>    vSample.push_back(vT1);<BR>    vSample.push_back(vT2);    </P>
<P>    process(&amp;vSample);<BR>    cout&lt;&lt;endl;<BR>    ::system("pause");<BR>}</P>


页: [1]

编程论坛