本节内容参考: 【墨鳌】【C++ 编码小技巧】
一、max 和 min 连续取极值
栗子:求 a,b,c,d 的最小值,最大同理。
家常版本:
int getMin(int a,int b,int c,int d){
return min(min(a,b),min(c,d));
}
我们只需要在普通的 min() 函数内嵌套一个花括号即可,直接扩展成了多元素最小值。
int getMin(int a,int b,int c,int d){
return min({a,b,c,d});
}
二、lambda函数(或称为“匿名函数”)
假设我们需要处理出字符串中的所有的非元音的字母,可能掺杂其他字符,我们也需要过滤掉。
家常版本:
string notVowel(string s){
string ans;
string vowels="aeiouAEIOU";
for(auto&c:s){
if(vowels.find(c)!=vowels.end() && isalpha(c)){
ans+=c;
}
}
return ans;
}
如果我们觉得 if 判断中的条件太多了,或者说对于以上这种判断,我们需要重复调用几次的话,我们可以考虑封装一个 lambda 函数。这样我们减少了编码的耦合,易于调试和阅读。
string notVowel(string s){
string ans;
string vowels="aeiouAEIOU";
auto check=[&](char&c){
return vowels.find(c)!=vowels.end() && isalpha(c);
};
for(auto&c:s){
if(check(c)){
ans+=c;
}
}
return ans;
}
lambda函数中的 []表示捕获列表,&表示取引用,= 是取值,允许函数内访问外部的内存申明。