问题:在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

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

被折叠的 条评论
为什么被折叠?



