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

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. 1.写页面 2.css的继承属性有哪些 3.margin对布局的影响

    1. sparent 透明的 2. placeholder 提示语 写页面 1.搞清结构层次 2. 保证模块化 让它们之间不能收到影响. (1) 元素性质 (2)标准流 浮动带来的脱离文档流撑不起父级 ...

  2. 今天给大家补充一下 background 用法

    补充一个知识点 1,浏览器默认字体大小是font-size:16px:谷歌最小字体是10px,其他浏览器是12px 2. 选择器 通配符选择器     *   表示 3.background  背景 ...

  3. Java先比较日期再比较时间

    package com.bihang.seaya; import lombok.Data; import java.text.ParseException; import java.text.Simp ...

  4. 1.Odoo产品分析系列 – 目录

    Odoo产品分析 (一) – 一切为零 Odoo产品分析 (二) – 商业板块(1) – 销售(1) Odoo产品分析 (二) – 商业板块(1) – 销售(2) Odoo产品分析 (二) – 商业板 ...

  5. RPC理论以及Dubbo的使用介绍

    RPC 的主要功能目标是让构建分布式应用更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性. 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用. RP ...

  6. JMeter 报告监听器导入.jtl结果文件报错解决方案

    JMeter 报告监听器导入.jtl结果文件报错解决方案   by:授客 QQ:1033553122   1. 问题描述 把jmeter压测时生成的 .jtl结果文件导入监听器报告中,弹出如下错误提示 ...

  7. Nginx http相关常用配置总结

    Nginx http相关常用配置总结   by:授客  QQ:1033553122   测试环境 nginx-1.10.0 client_max_body_size Syntax: client_ma ...

  8. C#:关于C#4中IEnumerable<out T>的理解

    IEnumerable<out T>这个接口非常常见,它是最基础的泛型集合接口,表示可迭代的项的序列. 但是奇怪的是为什么泛型参数要带一个“out”? 经过一番资料查阅后,发现此“out” ...

  9. 微服务扩展新途径:Messaging

    [编者按]服务编排是微服务设置的一个重要方面.本文在利用 ActiveMQ 虚拟话题来实现这一目标的同时,还会提供实用性指导.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 目前,微服务使用 ...

  10. python使用sax实现xml解析

    之前在使用xml解析的时候,在网上搜了很多教程,最终没有能按照网上的教程实现需求. 所以呢,只好自己去看源码,在sax的__init__.py下看到这么一段代码: 1 def parse(source ...