C++中lambda 表达式、unique()、stable_sort()、find_if()、find_each()的综合使用

本文介绍如何使用C++ STL中的vector容器结合lambda表达式,实现筛选长度大于等于4的字符串元素,并演示了如何通过自定义排序规则进行元素排序,最后输出符合条件的元素。

 问题:在vector<string>找出所有长度大于等于4的元素。

 方法如下:

#include <iostream>
#include <array>
#include <vector>
#include <algorithm>
#include <list>
#include <deque>
#include <numeric>
#include <forward_list>

using namespace std;

//删除重复的元素                                                                
void delDups(vector<string> &svec){
	sort(svec.begin(), svec.end());
	auto end_u = unique(svec.begin(), svec.end());
	svec.erase(end_u, svec.end());
}
//自定义的排序规则                                                              
bool shorter(const string s1, const string s2){
	return s1.size() < s2.size();
}
//用lambda作为参数                                                              
void bigger(vector<string> &words,
	vector<string>::size_type sz)
{
	delDups(words);

	//用lambda作为第三个参数   
	stable_sort(
		words.begin(), 
	    words.end(),
	    [](const string &s1, const string &s2)
	{return s1.size() < s2.size();
	});
    //stable_sort(words.begin(), words.end(), shorter);

	//把长度参数sz作为捕获列表,传递给lambda表达式
	auto idx = find_if(
		words.begin(),
		words.end(),
		[sz](const string &s)
	{
		return s.size() >= sz;
	});//函数返回字符串的长度大于等于4的地址

	auto cnt = words.end() - idx;//长度大于等于4的字符串个数
	cout << cnt << " word's length >= " << sz << endl;
	for_each(
		idx, 
		words.end(), 
		[](const string &s)
	{
		cout << s << " ";
	});//逐一输出字符串长度大于等于4之后的字符串
	cout << endl;
}
int main(){
	//test1 自定义排序算法                                                        
	/*
	vector<string> svec{"the","quick","red","fox","jumps",
	"over", "the","slow","red","turtle"};
	delDups(svec);
	//先按长度排序,长度相同的,再用字典顺序排序
	stable_sort(svec.begin(),svec.end(),shorter);
	for(const auto &s : svec){
	cout << s << " ";
	}
	cout << endl;
	for (int i = 0; i < svec.size(); i++){
		if (svec[i].size() >= 4){
			cout << svec[i]<<' ';
		}
	}
	*/
	//test2 用lambda作为参数                                                      
	vector<string> svec{ "the", "quick", "red", "fox", "jumps",
		"over", "the", "slow", "red", "turtle" };
	bigger(svec, 4);

}

 本文链接:https://www.cnblogs.com/xiaoshiwang/p/9666962.html

 更多关于lambda 表达式的使用可以参考:https://blog.youkuaiyun.com/u010984552/article/details/53634513

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值