as my sql 后面加表达式_Lambda 表达式有何用处?如何使用?
C++11推出了新的lambda表達式,這是相當好用的東西。
lambda表達式基本用法
/*返回一個數值*/
int main() {
auto str = [] {return 54; };
//auto str = []() -> int {return 54; };這里還可以指定返回值類型為int但也可以不用指定
cout << str() << endl;//str()會返回一個54
}
/*通過調用來實現一個簡短的函數*/
int main() {
auto str = [](int a, int b) {return a > b ? a : b; };
cout << str(5,3) << endl;
}
/*
利用[]可以調用外部的變量可以在函數體內使用
[=] 通過值捕捉所有變量
[&] 通過引用捕捉所有變量
[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可以通過指定的函數來替換排序的規則
#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; });//可以將其放在函數里作為一個函數表達式
for (auto v : a) cout << v << endl;
}
我們還可以用lambda作為函數指針參數
#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);
}
這個方法看著挺好,但是當我們有更多的需求的時候就要定義更多的無用函數就會很麻煩,所以這里也可以運用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組合多個函數
這種方法可以用來組合多個通過一個函數來調用多個函數,但如果想要調用其他函數就要重寫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);
}
用函數指針,不夠簡潔,而且每次都要指定函數參數以及函數的指針
#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);/*而且這里還可以指定調用的參數,組合完可以當一個函數來調用*/
}
總結
以上是生活随笔為你收集整理的as my sql 后面加表达式_Lambda 表达式有何用处?如何使用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python祝福祖国代码_国庆节踩空间留
- 下一篇: 塑壳断路器用考虑启动电流么_塑壳式断路器