学了for_each后正好可以学习Lambda
class CTest
{
public:
CTest() : m_nData(20) { NULL; }
void TestLambda()
{
vector<int> vctTemp;
vctTemp.push_back(1);
vctTemp.push_back(2);
// 无函数对象参数
{
for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; });
}
// 以值方式传递作用域内所有可见的局部变量(包括this)
{
int a = 10;
for_each(vctTemp.begin(), vctTemp.end(), [=](int v){ cout << v+a + m_nData << endl; });
}
// 以引用方式传递作用域内所有可见的局部变量(包括this)
{
int a = 10;
for_each(vctTemp.begin(), vctTemp.end(), [&](int v)mutable{ cout << v+a +m_nData << endl; a++; });
cout << a << endl;
}
// 以值方式传递局部变量a
{
int a = 10;
//注意:在lambda表达式中的 a 只是一个拷贝,添加mutable之后,可以修改a的值,但只是修改拷贝的a
for_each(vctTemp.begin(), vctTemp.end(), [a](int v)mutable{ cout << v+a << endl; a++; });
cout << a << endl;
}
// 以引用方式传递局部变量a
{
int a = 10;
for_each(vctTemp.begin(), vctTemp.end(), [&a](int v){ cout << v+a << endl; a++; });
cout << a << endl;
}
// 传递this,输出:21 22
{
for_each(vctTemp.begin(), vctTemp.end(), [this](int v){ cout << v+m_nData << endl; });
}
// 除b按引用传递外,其他均按值传递
{
int a = 10;
int b = 15;
for_each(vctTemp.begin(), vctTemp.end(), [=, &b, &a](int v){ cout << v+a << endl; b++; });
cout << b << endl;
}
// 操作符重载函数参数按值传递
{
for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; });
}
// 操作符重载函数参数按引用传递
{
for_each(vctTemp.begin(), vctTemp.end(), [](int &v){ v++; cout<<v<<endl;});
}
// 空的Lambda表达式
{
[](){}();
[]{}();
}
}
private:
int m_nData;
};