【足迹C++primer】32、定制操作_1
版权声明:本文为博主原创文章,未经博主同意不得转载。
https://blog.csdn.net/cutter_point/article/details/32066151
定制操作
向算法传递函数
谓词
bool isShorter(const string &s1, const string &s2)
{
return s1.size()<s2.size();
}
int main()
{
//按长度由短至长排序words
sort(words.begin(), words.end(), isShorter);
}
这个words里面是一个string类型的数组,这个调用会是将words重排,全部长度为3的单词排在长度为4的前面,然后是长度为5的单词。
排序算法
近期老碰到排序。冒泡排序什么的已经非常熟悉啦,
选择排序不太清楚,什么二分啦,快排啦,哈希啦。就仅仅是知道思路,得努力啊!
!
!
vector<string> words={"fox","jumps","over","quick","red","red","slow","the","the","turtle"};
//按长度由短至长排序words
sort(words.begin(), words.end(), isShorter);
elimDups(words); //将words按字典序重排,并消除反复单词
//按长度重排。长度一样按字典
stable_sort(words.begin(), words.end(), isShorter);
for(const auto &s : words) //无需拷贝字符串
cout<<s<<" "; //打印每一个元素
cout<<endl;
习题:
//调用算法进行排序打印长度大于5的元素
auto it=partition(words.begin(), words.end(), isLong);
//返回的是使谓词为true的最后一个迭代器
cout<<"输出长度大于等于5的字符!
!
"<<endl;
for(vector<string>::iterator st=words.begin() ; st != it ; ++st)
cout<<*st<<" ";
cout<<endl;
lambda表达式
!!
计算满足size>=sz的元素的数目
!
又来了好东西了。大家是不是感觉幸福来的太突然!!!

!
!
!
介绍lambda

//是不是有点不一样。这里定义了可调用对象f,它不接受參数。返回42
auto f=[] {return 42;};
//看哥调用它
cout<<f()<<endl;
这里假设lambda的函数体包括不论什么单一return语句之外的内容、且为指定返回类型。则返回void类型
向lambda传递參数,使用捕获列表
stable_sort(words.begin(), words.end(), [] (const string &a, const string &b)
{return a.size()<b.size();})
void fcn1()
{
vector<string> words={"fox","jumps","over","quick","red","red","slow","the","the","turtle"};
size_t v1 = 42;
//获取一个迭代器,指向第一个满足size()>=v1的元素
auto wc=find_if(words.begin(), words.end(), [v1](const string &a){return a.size()>=v1;});
}
void fcn2()
{
vector<string> words={"fox","jumps","over","quick","red","red","slow","the","the","turtle"};
size_t v1 = 42;
//获取一个迭代器。指向第一个满足size()>=v1的元素
auto wc=find_if(words.begin(), words.end(), [v1](const string &a){return a.size()>=v1;});
//计算满足size>=sz的元素的数目
auto count=words.end()-wc;
cout<<count<<" "<<make_plural(count, "word", "s")
<<" of length "<<v1<<" or longer "<<endl;
//for_each算法
for_each(wc, words.end(),[](const string &s){cout<<s<<" yeah! ";});
}
【足迹C++primer】32、定制操作_1的更多相关文章
- 【足迹C++primer】32、定制操作_2
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/32301839 定制操作_2 完整的big ...
- lambda 表达式定制操作
泛型算法中的定制操作 许多算法都会比较输入序列中的元素以达到排序的效果,通过定制比较操作,可以控制算法按照编程者的意图工作. 普通排序算法: template<class RandomItera ...
- 【足迹C++primer】38、关联容器操作(2)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/35244805 关联容器操作(2) map ...
- 定制操作(传递函数或lambda表达式)
很多算法都会比较输入序列中的元素.默认情况下,这类算法使用元素类型的<或==运算符完成比较.标准库还为这些算法定义了额外的版本,允许我们提供自己定义的操作来代替默认运算符. 例如,sort算法默 ...
- 【足迹C++primer】表达式求值
表达式求值 /** * 功能:表达式求值(0到9) * 时间:2014年6月15日08:02:31 * 作者:cutter_point */ #include<stdlib.h> #inc ...
- 【足迹C++primer】46、动态存储类
动态存储类 StrVec Class Design StrVec Class Definition class StrVec { public: //构造函数 StrVec():elements(nu ...
- 【足迹C++primer】48、函数引用操作符
函数引用操作符 struct absInt { int operator()(int val) const { cout<<val<<"<->!!!&qu ...
- 【足迹C++primer】47、Moving Objects(1)
Moving Objects(1) * 功能:Moving Objects * 时间:2014年7月17日08:46:45 * 作者:cutter_point */ #include<iostr ...
- 【足迹C++primer】49、超载,变化,运营商
超载,变化,运营商 Conversion Operators 转换操作符 operator type() const Conversions to an array or a function typ ...
随机推荐
- 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统
***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...
- hibernate学习系列-----(3)Session 缓存和持久化生命周期以及Session 基本操作
Session缓存原理 为了能够在控制台更好的看到我们的hibernate干了些什么,可以在hibernate.cfg.xml文件中写入如下配置: <!-- print all generate ...
- C#程序不包含适合于入口点的静态“Main”方法怎么办
如下图所示,一般程序上次运行还好好的,而且不管你复制粘贴再简单的程序也出现这种错误提示. 先点击右侧的显示所有文件,下面列举了所有CS文件,右击点击包括在项目中,则该文件呈现绿色,再运行即可.不过 ...
- PS如何为图片添加四面投影
如图所示,像四周的投影 很像Areo效果的Windows7. 用这样的图片做成PNG透明的效果非常好. 我们不妨仔细研究上图的两个角,发现其实只是简单的投影效果而已. 简单的使用投影效果即可.注意混合 ...
- extjs_06_grid(列锁定&列分组)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- JQuery find函数选择器使用
- kernel BUG
https://kernelnewbies.org/FAQ/BUG BUG() and BUG_ON(condition) are used as a debugging help when some ...
- TC2安装方法
电驴下载TC2英文原版安装文件,3 Disk,安装方法记录如下: cmd.exe chcp 437 挂载安装文件夹1到A盘 subst a: d:\c\Disk1 另开一个cmd,转到A盘,输入ins ...
- android:分享 一个非常强大的LOG开关---Log.isLoggable
1.API亮点: 此API能够实现不更换APK.在出问题的手机上就直接能抓到有效log,能提升不少工作效率. .API介绍 近期在解决短信问题时.看到一个非常强大的LOG开关---Log.isLogg ...
- maven 工程聚合插件
<!-- war包生成插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <a ...