#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class printstring
{
public:
printstring(ostream &o = cout , string s = "end!")
:os(o),sep(s){}
//括号运算符重载()
void operator()(const string &s)const
{
os<< s << ' ' << sep << endl;
}
private:
ostream &os;
string sep;
};
bool compare(string &a,string &b)
{
return a < b;
}
int main()
{
string s = "guangzhou";
//容器搜索
bool flag = (find(s.begin(),s.end(),'g') == s.end());
//字符串搜索
string::size_type flag1 = s.find("u") ;
cout<<flag1<<endl;
printstring printer;
printer(s);
printstring errors(cerr,"china");
errors(s);
/*
*lambda表达式
* [capture list](parameter list) -> return type
* {
* function body
* }
* 可以忽略参数列表:等价于指定一个空参数列表,不忽略时不能有默认形参
* 可以忽略返回类型:根据函数体的代码推断出返回类型。若除return外还有其他语句,则返回void
* 必须保留捕获列表和函数体
* (1)显式:值捕获[a],引用捕获[&a]
* (2)隐式捕获:值[=],引用[&]
* (3)混合:[&或者=,..]第一个必须是&或者=
* */
auto f = []{return 42;};
cout << f() <<endl;
//返回bool
auto com = [](const string &a, const string &b){return a<b;};
//com2返回void,所以要指明返回类型
auto com2 = [](const string &a, const string &b)
{
if(a<b) return a;
else return b;
};
cout<<endl<<com2("aa","bb")<<endl;
auto com3 = [](const string &a, const string &b) -> const string
{
if(a<b) return a;
else return b;
};
cout<<endl<<com3("yang","yangg")<<endl;
vector<int> v{ 1,2,3,4,5,-1};
transform(v.begin(),v.end(),v.begin(), [](const int a)
{
if(a<0) return -a;
else return a;
});
for(auto a:v)
cout<<a<<endl;
cout << "Hello World!" << endl;
return 0;
}
c++语法之Lambda表达式
最新推荐文章于 2024-05-12 11:04:22 发布