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对象创建时被初始化。