| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1881 人关注过本帖
标题:泛型算法的问题 哪位给指点一下
只看楼主 加入收藏
stabber
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-9-21
收藏
 问题点数:0 回复次数:0 
泛型算法的问题 哪位给指点一下

#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");
}

搜索更多相关主题的帖子: 泛型 算法 
2007-09-22 10:08
快速回复:泛型算法的问题 哪位给指点一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018753 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved