as my sql 后面加表达式_Lambda 表达式有何用处?如何使用?
C++11推出了新的lambda表達式,這是相當好用的東西。
lambda表達式基本用法
/*返回一個數(shù)值*/
int main() {
auto str = [] {return 54; };
//auto str = []() -> int {return 54; };這里還可以指定返回值類型為int但也可以不用指定
cout << str() << endl;//str()會返回一個54
}
/*通過調(diào)用來實現(xiàn)一個簡短的函數(shù)*/
int main() {
auto str = [](int a, int b) {return a > b ? a : b; };
cout << str(5,3) << endl;
}
/*
利用[]可以調(diào)用外部的變量可以在函數(shù)體內(nèi)使用
[=] 通過值捕捉所有變量
[&] 通過引用捕捉所有變量
[value] 通過值捕捉value,不捕捉其它變量
[&value] 通過引用捕捉value,不捕捉其它變量
[=, &value] 默認通過值捕捉,變量value例外,通過引用捕捉
[&, value] 默認通過引用捕捉,變量value例外,通過值捕捉
*/
int main() {
int i = 0;
auto str = [&i]() {
for (int j = 0; j < 10; j++) i += j;
};
str();
cout << i << endl;
}
lambda表達式在sort中的使用
sort可以通過指定的函數(shù)來替換排序的規(guī)則
#include
#include
#include
using namespace std;
int sor(int a,int b) {
return a > b ? a : b;
}
int main() {
vector a = { 1,2,3,4,5,6,7,8,9,10 };
sort(a.begin(), a.end(), sor);
for (auto v : a) cout << v << endl;
}
而當我們引用lambda表達式的時候我們就可以直接這么用
#include
#include
#include
using namespace std;
int main() {
vector a = { 1,2,3,4,5,6,7,8,9,10 };
sort(a.begin(), a.end(), [](int a, int b) {return a > b ? a : b; });//可以將其放在函數(shù)里作為一個函數(shù)表達式
for (auto v : a) cout << v << endl;
}
我們還可以用lambda作為函數(shù)指針參數(shù)
#include
#include
using namespace std;
int test1(int i) {
return i+i;
}
void test(int (*poj)(int)) {
for (int i = 0; i < 10; i++) {
cout << poj(i)<
}
}
int main() {
test(test1);
}
這個方法看著挺好,但是當我們有更多的需求的時候就要定義更多的無用函數(shù)就會很麻煩,所以這里也可以運用lambda的表達式來做
auto test =[] (auto poj) {//這里也可以使用Lambda表達式來做
//void test(int (*poj)(int)) {
for (int i = 0; i < 10; i++) {
cout << poj(i) << endl;
}
};
int main() {
test([](int i) {return i + i; });
test([](int i) {return i - i; });
test([](int i) {return i * i; });
test([](int i) {return i / i; });
}
我們還可以通過Lambda組合多個函數(shù)
這種方法可以用來組合多個通過一個函數(shù)來調(diào)用多個函數(shù),但如果想要調(diào)用其他函數(shù)就要重寫fun方法
#include
#include
#include
using namespace std;
void str(int &i) {
cout << i + 10 << endl;
}
void sss(int &i) {
cout << i - 10 << endl;
}
void fun(int a) {
str(a);
sss(a);
}
int main() {
int srt = 50;
fun(srt);
}
用函數(shù)指針,不夠簡潔,而且每次都要指定函數(shù)參數(shù)以及函數(shù)的指針
#include
#include
#include
using namespace std;
void str(int i) {
cout << i + 10 << endl;
}
void sss(int i) {
cout << i - 10 << endl;
}
void fun(int a,void (*f1)(int),void (*f2)(int)) {
f1(a);
f2(a);
}
int main() {
int srt = 50;
fun(srt,str,sss);
}
而當我們采用lambda表達式
#include
#include
#include
using namespace std;
void str(int i) {
cout << i + 10 << endl;
}
void sss(int i) {
cout << i - 10 << endl;
}
auto fun1 = [](auto f1, auto f2) {
return [=](int a) {
f1(a);
f2(a);
};
};
int main() {
int srt = 50;
auto f= fun1(str, sss);
f(srt);/*而且這里還可以指定調(diào)用的參數(shù),組合完可以當一個函數(shù)來調(diào)用*/
}
總結
以上是生活随笔為你收集整理的as my sql 后面加表达式_Lambda 表达式有何用处?如何使用?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python祝福祖国代码_国庆节踩空间留
- 下一篇: 塑壳断路器用考虑启动电流么_塑壳式断路器