C++:bind函数统计数量

问题

重写统计长度小于等于6的单词数量的程序,使用bind函数代替lambda.

ps:昨晚因为导入库的问题,搞了一晚上都没搞好,所以导入一定要谨慎!

C++.
image-2113

源代码

注意:一定要引入using namespace std::placeholders;,否则报错!!!


/*************************************************************************
> File Name: test.10.22.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年06月16日
************************************************************************/

#include
#include
#include
#include
using namespace std;
using namespace std::placeholders;

/**********************************

重写统计长度小于等于6的单词数量的程序,使用函数代替lambda.

**************************************/

bool isshorter(const string &a,string::size_type sz)
{
return !((a.size())<=sz); } ostream &out(ostream &os,const string &s) { return os << s << "\n "; } void elis(vector &vec,string::size_type sz)
{
sort(vec.begin(),vec.end());
cout << "**************************\n排序后\n**********************" << endl; for_each(vec.begin(),vec.end(),bind(out,ref(cout), _1)); //auto fre = unique(vec.begin(),vec.end(),bind(isshorter, _1, sz)); auto fre = unique(vec.begin(),vec.end()); cout << "************************\n排重后\n***********************" << endl; for_each(vec.begin(),vec.end(),bind(out,ref(cout), _1)); vec.erase(fre,vec.end()); cout << "************************\n去重后\n**********************" << endl; for_each(vec.begin(),vec.end(),bind(out,ref(cout), _1)); cout << "**********************\n\n计算结果\n\n******************" << endl; auto findifs = partition(vec.begin(),vec.end(),bind(isshorter , _1 , sz)); auto count = vec.end()-findifs; cout << "有:" << count << "个元素小于等于:" << 6 << endl; } int main() { vector vec;
string pa;
cout << "你可以输入数字,字母[Linux下面按ctrl+D结束输入]:" << endl; while(cin >> pa)
{
vec.push_back(pa);
}
elis(vec,6);
return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据