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