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

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. js的数据类型:单例模式,工厂模式,构造函数

    js数据类型 基本数据类型:string   undefined   null  boolean  number 引用数据类型  Object  array  function 二者的区别 基本数据类 ...

  2. Gvim 和vim 有什么区别

    Gvim 和vim 有什么区别 Gvim是windows的 vim是linux的黑色的命令符 Gvim是单独的窗口下的vim,像notepad一样. vim就是在黑乎乎的cmd窗口下的编辑器.wind ...

  3. JavaScript初学者必看“this”

    译者按: JavaScript的this和Java等面向对象语言中的this大不一样,bind().call()和apply()函数更是将this的灵活度进一步延伸. 原文: JavaScript: ...

  4. 包含min函数的栈 ,二叉树的镜像

    包含min函数的栈 问题 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 代码 # -*- coding:utf-8 -*- class Sol ...

  5. es6 语法 (解构赋值)

    1.结构赋值 { let a,b,c; [a,b] = [1,2]; console.log(a,b); //1,2} { let a,b,rest; [a,b,...rest] = [1,2,3,4 ...

  6. 【代码笔记】Web-JavaScript-JavaScript字符串

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  7. Python运维开发:初识Python(一)

    一.Pythton简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

  8. Genymotion安卓模拟器和VirtualBox虚拟机安装、配置、测试

    Genymotion安卓模拟器和VirtualBox虚拟机安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.VirtualBox虚拟机安装 4.Genymotion安卓 ...

  9. Android为TV端助力 关于android的一些基础知识

    怕自己以后忘了,所以在这里先写写! equal和==的区别是,一个用于判断字符串,一个用于判断int是否相等 equal比较的是对象,==比较的是值

  10. Android string.xml 添加特殊字符

    解决项目中在string.xml 中显示特殊符号的问题,如@号冒号等.只能考虑使用ASCII码进行显示: @号 @ :号 : 空格   以下为常见的ASCII十进制交换编码: --> <- ...