版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/cutter_point/article/details/32301839

定制操作_2

完整的biggies

好吧上一章是有点2B了,我的,昨天可能是刚考完心情有点小激动就不想学习了,我错了!

  1. /**
  2. * 功能:定制操作
  3. * 时间:2014年6月19日07:32:03
  4. * 作者:cutter_point
  5. */
  6. #include<iostream>
  7. #include<vector>
  8. #include<string>
  9. #include<numeric>
  10. #include<algorithm>
  11. using namespace std;
  12. void elimDups(vector<string> &words)
  13. {
  14. //按字典顺序排列
  15. sort(words.begin(), words.end());
  16. //unique重排输入范围,使每一个单词出现一次
  17. //排列在范围的前部,返回不反复区域之后一个位置的迭代器
  18. auto end_unique=unique(words.begin(), words.end());
  19. //使用向量操作erase删除反复单词
  20. words.erase(end_unique, words.end());
  21. }
  22. //假设ctr的值大于1。返回word的复数形式
  23. string make_plural(size_t ctr, const string &word, const string &ending)
  24. {
  25. return (ctr>1)?word+ending:word;
  26. }
  27. void biggies(vector<string> &words, vector<string>::size_type sz)
  28. {
  29. elimDups(words); //将words按字典顺序排列,删除反复单词
  30. //按长度排序。长度同样的单词维持字典序
  31. stable_sort(words.begin(), words.end(),
  32. [](const string &a, const string &b){return a.size()<b.size();});
  33. //获取一个迭代器,指向第一个满足size()>=sz的元素
  34. auto wc=find_if(words.begin(), words.end(),
  35. [sz](const string &a){return a.size()>=sz;});
  36. //计算满足size>=sz的元素的数目
  37. auto count=words.end()-wc;
  38. cout<<count<<" "<<make_plural(count, "word", "s")
  39. <<" of length "<<sz<<" or longer "<<endl;
  40. //打印长度大于等于给定值的单词,每一个单词后面接一个空格
  41. for_each(wc, words.end(), [](const string &s){cout<<s<<" ";});
  42. cout<<endl;
  43. }
  44. int main()
  45. {
  46. vector<string> words={"fox","jumps","over","quick","red","red","slow","the","the","turtle"};
  47. size_t v1 = 4;
  48. biggies(words, v1);
  49. return 0;
  50. }

课后的几个习题

  1. /**
  2. * 功能:编写一个lambda。接受两个int,返回他们的和
  3. * 时间:2014年6月19日08:10:08
  4. * 作者:cutter_point
  5. */
  6. #include<iostream>
  7. #include<algorithm>
  8. #include<numeric>
  9. using namespace std;
  10. void demo_14()
  11. {
  12. int a=42;
  13. int b=38;
  14. auto c1=[&a,&b]{return a+b;};
  15. cout<<" a+b= "<<c1()<<endl;
  16. }
  17. void demo_15()
  18. {
  19. size_t a=38;
  20. int c=8;
  21. auto d15=[&a](const int &b){return a+b;};
  22. cout<<" a+b= "<<d15(c)<<endl;
  23. a=42;
  24. auto j=d15(c);
  25. cout<<" a+b= "<<d15(c)<<" j= "<<j<<endl;
  26. }
  27. int main()
  28. {
  29. demo_14();
  30. demo_15();
  31. return 0;
  32. }

lambda捕获和返回

当定义一个lambda的时候编译器便生成一个与lambda相应的新的(未命名的)类类型。
当使用auto定义一个用lambda初始化的变量时,定义了一个从lambda生成的类型的对象。

引用捕获

注意这个函数和上面的额不同哦!!

  1. void biggies(vector<string> &words, vector<string>::size_type sz, ostream &os=cout, char c=' ')
  2. {
  3. elimDups(words); //将words按字典顺序排列,删除反复单词
  4. //按长度排序,长度同样的单词维持字典序
  5. stable_sort(words.begin(), words.end(),
  6. [](const string &a, const string &b){return a.size()<b.size();});
  7. //获取一个迭代器,指向第一个满足size()>=sz的元素
  8. auto wc=find_if(words.begin(), words.end(),
  9. [sz](const string &a){return a.size()>=sz;});
  10. //计算满足size>=sz的元素的数目
  11. auto count=words.end()-wc;
  12. cout<<count<<" "<<make_plural(count, "word", "s")
  13. <<" of length "<<sz<<" or longer "<<endl;
  14. //打印长度大于等于给定值的单词,每一个单词后面接一个空格
  15. /*
  16. for_each(wc, words.end(), [](const string &s){cout<<s<<" ";});
  17. cout<<endl;
  18. */
  19. for_each(words.begin(), words.end(), [&os, c](const string &s){os<<s<<c;});
  20. }

PS:看来,这章对我来说好像是有点难的样子,所以我就慢下速度,不囫囵吞枣了。慢慢学。心急吃不了热豆腐。像牛学习,默默努力,不知不觉几亩地就犁完了。

【足迹C++primer】32、定制操作_2的更多相关文章

  1. 【足迹C++primer】32、定制操作_1

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/32066151 定制操作 向算法传递函数 ...

  2. lambda 表达式定制操作

    泛型算法中的定制操作 许多算法都会比较输入序列中的元素以达到排序的效果,通过定制比较操作,可以控制算法按照编程者的意图工作. 普通排序算法: template<class RandomItera ...

  3. 【足迹C++primer】38、关联容器操作(2)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/35244805 关联容器操作(2) map ...

  4. 定制操作(传递函数或lambda表达式)

    很多算法都会比较输入序列中的元素.默认情况下,这类算法使用元素类型的<或==运算符完成比较.标准库还为这些算法定义了额外的版本,允许我们提供自己定义的操作来代替默认运算符. 例如,sort算法默 ...

  5. 【足迹C++primer】表达式求值

    表达式求值 /** * 功能:表达式求值(0到9) * 时间:2014年6月15日08:02:31 * 作者:cutter_point */ #include<stdlib.h> #inc ...

  6. 【足迹C++primer】46、动态存储类

    动态存储类 StrVec Class Design StrVec Class Definition class StrVec { public: //构造函数 StrVec():elements(nu ...

  7. 【足迹C++primer】48、函数引用操作符

    函数引用操作符 struct absInt { int operator()(int val) const { cout<<val<<"<->!!!&qu ...

  8. 【足迹C++primer】47、Moving Objects(1)

    Moving Objects(1) * 功能:Moving Objects * 时间:2014年7月17日08:46:45 * 作者:cutter_point */ #include<iostr ...

  9. 【足迹C++primer】49、超载,变化,运营商

    超载,变化,运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...

随机推荐

  1. Java高并发--安全发布对象

    Java高并发--安全发布对象 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 发布对像:使一个对象能够被当前范围之外的对象使用. 对象逸出:一种错误的发布.当一个对象 ...

  2. 发生服务器错误: Error loading MySQLdb module: libmysqlclient.so.18: cannot open shared object file: No such file or directory

    在hue上配置Mysql的时候,出现的错误:  发生服务器错误: Error loading MySQLdb module: libmysqlclient.so.18: cannot open sha ...

  3. Mobius反演的套路

    T1 \(\sum_{i=1}^N \sum_{j=1}^M [(i,j)=1]\) \(f(d)=\sum_{i=1}^N \sum_{j=1}^M [(i,j)=d]\) \(g(d)=\sum_ ...

  4. POJ 2407Relatives

    Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15566   Accepted: 7900 Descri ...

  5. SqlMapConfig配置加注解

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...

  6. 95%的中国网站需要重写CSS

    95%的中国网站需要重写CSS 很长一段时间,我都使用12px作为网站的主要字体大小.10px太小,眼睛很容易疲劳,14px虽容易看清,却破坏页面的美感.唯独12px在审美和视力方面都恰到好处. 谁对 ...

  7. Hibernate概念初探

    概述 Hibernate是一个开源代码的对象关系映射(ORM)框架,是基于Java的持久化中间件,它对JDBC进行轻量级的对象封装. 它不仅提供了从Java类到数据表之间的映射,也提供了查询和事务机制 ...

  8. 如何获取view的大小

    很多初学者都会犯一个错误 ,就是在onCreate或者onStart里面去获取view的大小,然而这样获取到的宽高通常都是0,为什么呢?因为view的测量过程和activity的生命周期不是同步的,因 ...

  9. js获取选中日期的当周的周一和周日

    js获取选中日期的当周的周一和周日 第一种方法(推荐): function getWeekStr(str) { // 将字符串转为标准时间格式 str2 = Date.parse(str); let ...

  10. Android内存优化(五) Lint代码扫描工具

     1.使用 工具栏 -> Analyze -> Inspect Code… 点击 Inspect Code 后会弹出检查范围的对话框: 默认是检查整个项目,我们可以点击 Custom sc ...