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

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

定制操作_2

完整的biggies

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

/**
* 功能:定制操作
* 时间:2014年6月19日07:32:03
* 作者:cutter_point
*/ #include<iostream>
#include<vector>
#include<string>
#include<numeric>
#include<algorithm> using namespace std; void elimDups(vector<string> &words)
{
//按字典顺序排列
sort(words.begin(), words.end());
//unique重排输入范围,使每一个单词出现一次
//排列在范围的前部,返回不反复区域之后一个位置的迭代器
auto end_unique=unique(words.begin(), words.end());
//使用向量操作erase删除反复单词
words.erase(end_unique, words.end());
} //假设ctr的值大于1。返回word的复数形式
string make_plural(size_t ctr, const string &word, const string &ending)
{
return (ctr>1)?word+ending:word;
} void biggies(vector<string> &words, vector<string>::size_type sz)
{
elimDups(words); //将words按字典顺序排列,删除反复单词
//按长度排序。长度同样的单词维持字典序
stable_sort(words.begin(), words.end(),
[](const string &a, const string &b){return a.size()<b.size();});
//获取一个迭代器,指向第一个满足size()>=sz的元素
auto wc=find_if(words.begin(), words.end(),
[sz](const string &a){return a.size()>=sz;});
//计算满足size>=sz的元素的数目
auto count=words.end()-wc;
cout<<count<<" "<<make_plural(count, "word", "s")
<<" of length "<<sz<<" or longer "<<endl;
//打印长度大于等于给定值的单词,每一个单词后面接一个空格
for_each(wc, words.end(), [](const string &s){cout<<s<<" ";});
cout<<endl;
} int main()
{
vector<string> words={"fox","jumps","over","quick","red","red","slow","the","the","turtle"};
size_t v1 = 4; biggies(words, v1);
return 0;
}

课后的几个习题

/**
* 功能:编写一个lambda。接受两个int,返回他们的和
* 时间:2014年6月19日08:10:08
* 作者:cutter_point
*/ #include<iostream>
#include<algorithm>
#include<numeric> using namespace std; void demo_14()
{
int a=42;
int b=38;
auto c1=[&a,&b]{return a+b;}; cout<<" a+b= "<<c1()<<endl;
} void demo_15()
{
size_t a=38;
int c=8;
auto d15=[&a](const int &b){return a+b;};
cout<<" a+b= "<<d15(c)<<endl;
a=42;
auto j=d15(c);
cout<<" a+b= "<<d15(c)<<" j= "<<j<<endl;
} int main()
{
demo_14();
demo_15();
return 0;
}

lambda捕获和返回

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

引用捕获

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

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

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. [angularjs] angularjs系列笔记(一)简介

    Angularjs通过新的属性和表达式扩展了html Andularjs 可以构建一个单一页面的应用程序(SPAS SinglePageApplications) Angularjs通过指令扩展了ht ...

  2. 【Java每日一题】20170220

    20170217问题解析请点击今日问题下方的“[Java每日一题]20170220”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; import jav ...

  3. [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数

    [js高手之路]深入浅出webpack教程系列索引目录: [js高手之路]深入浅出webpack教程系列1-安装与基本打包用法和命令参数 [js高手之路]深入浅出webpack教程系列2-配置文件we ...

  4. HTTP与HTTPs的区别?

    简而言之:   HTTPS = HTTP + SSL HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头 HTTP 是不安全的,而 HTTPS 是安 ...

  5. 缓存MEMCACHE php调用(一)

    在项目中,涉及大访问量时,合理的使用缓存能减轻数据库的压力,同时提升用户体验.即在非实时性的需求的前提下,一小段时间内(若干秒),用于显示的数据从缓存中获取的,而不用直接读取数据库,能有效的减少数据库 ...

  6. angular 时间戳转换(星期过滤器)

    {{(value.time+'000' | date:'yyyy-MM-dd HH:mm:ss') : '/'}} .filter('getWeek', function() { return fun ...

  7. TFS 2017 持续集成速记

    VS2017许多激动人 心的功能,升级!   TFS2017也升级,不支持SQL2012,升级!不过貌似开发版不能升级,好吧,开发版升2014企业版! 2017据说不支持XAML生成了,但后台菜单中还 ...

  8. 显示Linux进程打开了哪些文件? 用lsof命令

    1.lsof abc.txt --> 显示开启文件 abc.txt的进程. 2.lsof -c abc  ---> 显示abc进程现在打开的文件. 3.lsof -c -p 1234 -- ...

  9. iOS ----------怎么修改xcode默认打开方式

    很简单就能解决:选中文件,右键,显示简介,打开方式,选择8.2.然后打钩.

  10. vue 构建项目vue-cli

    1.首先得有node和npm的环境,node的下载:http://nodejs.org/download/.安装node之后,npm也自动生成了,显示版本号就意味着安装成功 2.接下来就是安装vue- ...