一些有趣的C++代码书写方法

Posted by 谢玄xx on June 6, 2022

本节内容参考: 【墨鳌】【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函数中的 []表示捕获列表,&表示取引用,= 是取值,允许函数内访问外部的内存申明。