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