格式
Lambda表达式完整的声明格式如下:
[capture list] (params list) mutable exception-> return type { function body }
各项具体含义如下
capture list:捕获外部变量列表 params list:形参列表 mutable指示符:用来说用是否可以修改捕获的变量 exception:异常设定 return type:返回类型 function body:函数体
应用
该代码测试按照元音排序string类型的vector.它把sort函数的第三个比较函数,直接写在参数这个位置了。 capture里的内容是做捕获外部的变量,这个变量可以当作该函数的全局变量使用。()内的内容还是要当作参数列表来使用。
#include <string>
#include <vector>
#include "catch2/catch.hpp"
#include "range/v3/utility.hpp"
TEST_CASE("Checks sort3(int&, int&, int&)") {
std::vector<std::string> vec{"We", "love", "lambda", "functions"};
auto const vowels = [] (char const& c) { return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'; };
std::sort(vec.begin(), vec.end(), [vowels] (std::string const& x, std::string const& y) {
auto const xcount = std::count_if(x.cbegin(), x.cend(), vowels);
auto const ycount = std::count_if(y.cbegin(), y.cend(), vowels);
if (xcount == ycount) {
return (x.length() - static_cast<std::string::size_type>(xcount)) > (y.length() - static_cast<std::string::size_type>(ycount));
}
return xcount > ycount;
});
std::vector<std::string> correct_order{"functions", "lambda", "love", "We"};
CHECK(correct_order == vec);
}
std::countif
判断从开始到结尾有多少满足条件的,计数
static_cast
static_cast, 用于良性转换,一般不会导致意外发生,风险很低。编译时转换 https://www.geeksforgeeks.org/static_cast-in-c-type-casting-operators/
参考链接
匿名函数
|