c++学习
- 模板使用,求最大值
#include <iostream>
namespace guodong {
template<class T>
T max(T head) {
return head;
}
template<class T, typename... Args>
T max(T head, Args... args) {
T t = max(args...);
return (head > t)?head:t;
}
} // end of namespace
int main() {
int m = guodong::max(15, 12, 73,85,12,999,25);
std::cout<<m<<std::endl;
return 0;
}
结果:999
2. Lambda表达式
#include<iostream>
using namespace std;
int main(){
int x=1,y=2,z=0;
auto add = [&z](auto x,auto y){z=x+y;return z;};
auto res = add(x,y);
cout<<res<<','<<z<<endl;
}
结果:3,3
备注:
[] // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
Lambda 表达式的定义形式如下:
[外部变量访问方式说明符] (参数表) -> 返回值类型
{
语句块
}
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[4] = { 1, 2, 3, 4 };
int total = 0;
for_each(a, a + 4, [&](int & x) { total += x; x *= 2; });
cout << total << endl; //输出 10
for_each(a, a + 4, [=](int x) { cout << x << " "; });
return 0;
}
结果:
10
2 4 6 8
#include <iostream>
using namespace std;
int main()
{
int x = 100,y=200,z=300;
auto ff = [=,&y,&z](int n) {
cout <<x << endl;
y++; z++;
return n*n;
};
cout << ff(15) << endl;
cout << y << "," << z << endl;
}
结果:
100
225
201, 301