练习10.14:
#include <iostream>
using namespace std;
auto f1 = [](const int& a, const int& b) {return a + b; };
int main()
{
cout << f1(3, 4) << endl;
system("pause");
return 0;
}
练习10.15:
auto f2 = [a](const int& b) {return a + b; };
练习10.16:
#include <iostream>
using namespace std;
#include <vector>
#include <string>
#include <list>
#include <fstream>
#include <algorithm>
//排序
void elimDups(vector<string>& v)
{
//排序,删除重复单词
sort(v.begin(), v.end());
auto end_unique = unique(v.begin(), v.end());
v.erase(end_unique, v.end());
}
void biggies(vector<string>& v, vector<string>::size_type sz)
{
auto f1 = [](const string& a, const string& b) {return a.size() < b.size(); };
auto f2 = [sz](const string& c) {return c.size() >= sz; };
elimDups(v);
//按元素长度从小到大排序,同等长度元素按字典序排序
stable_sort(v.begin(), v.end(), f1);
//获取指向第一个满足size() >= sz的元素
auto fe = find_if(v.begin(), v.end(), f2);
auto count = v.end() - fe;
cout << "元素大小大于5的元素个数为:" << count << endl;
//打印
for_each(fe, v.end(), [](const string& s) {cout << s << " "; });
//也可以如下打印
//while (fe != v.end())
//{
// cout << *fe << " ";
// ++fe;
//}
cout << endl;
}
int main()
{
vector<string>vs;
ifstream in("story.txt");
string word;
while (in >> word)
{
vs.push_back(word);
}
//调用biggies前:
for (auto s : vs)
{
cout << s << " ";
}
cout << endl;
//调用biggies后:
biggies(vs, 5);
system("pause");
return 0;
}
练习10.17:略
练习10.18:变为partition后,注意元素大小大于等于5的单词所处位置:
void biggies(vector<string>& v, vector<string>::size_type sz)
{
auto f1 = [](const string& a, const string& b) {return a.size() < b.size(); };
auto f2 = [sz](const string& c) {return c.size() >= sz; };
elimDups(v);
//按元素长度从小到大排序,同等长度元素按字典序排序
stable_sort(v.begin(), v.end(), f1);
//获取指向第一个满足size() >= sz的元素
auto fe = partition(v.begin(), v.end(), f2);
auto count = fe - v.begin();
cout << "元素大小大于5的元素个数为:" << count << endl;
//打印
for_each(v.begin(), fe, [](const string& s) {cout << s << " "; });
cout << endl;
}
练习10.19:与上一题基本一样,把partition换为stable_partition
void biggies(vector<string>& v, vector<string>::size_type sz)
{
auto f1 = [](const string& a, const string& b) {return a.size() < b.size(); };
auto f2 = [sz](const string& c) {return c.size() >= sz; };
elimDups(v);
//按元素长度从小到大排序,同等长度元素按字典序排序
stable_sort(v.begin(), v.end(), f1);
//获取指向第一个满足size() >= sz的元素
auto fe = stable_partition(v.begin(), v.end(), f2);
auto count = fe - v.begin();
cout << "元素大小大于5的元素个数为:" << count << endl;
//打印
for_each(v.begin(), fe, [](const string& s) {cout << s << " "; });
cout << endl;
}