lambda的使用

void biggies( vector<string>::size_type sz)
{
	vector<string> words{ "saw","sbe","scr","sb" };
	sort(words.begin(), words.end());
	auto endl_flag = unique(words.begin(), words.end());
	words.erase(endl_flag, words.end());
	
	stable_sort(words.begin(), words.end(), [](const string& a, const string& b) {return a.size() < b.size();});
	auto wc = find_if(words.begin(), words.end(), [sz](const string& a) {return a.size() > sz;});
	auto count = words.end() - wc;
	
	for_each(wc, words.end(), [](const string &s) {cout << s << '\t';});
	cout << endl;
}

  

void x10t21()
{
	int num = 5;
	auto f = [&num]()->bool {if (num > 0) { num--;return false; } else return true;};
	while (!f());
	cout << num << endl;;
}

  当定义一个lambda时,编译器生成一个与lambda对应的新的(未命名)类类型。当一个函数传递一个lambda时,同时定义了一个新类型和该类型的一个对象,传递的参数就是此编译器生成的类类型的未命名对象,当使用auto定义一个用lambda初始化的变量时,定义了一个从lambda生成的类型的对象。默认情况下,从lambda生成的类都包含一个对应该lambda所捕获的变量的数据成员。类似任何普通类的数据成员,lambda的数据成员也在lambda对象创建时被初始化。

posted @ 2017-06-15 19:55  lineaar  阅读(206)  评论(0编辑  收藏  举报