先描述一段c++ primaer 第五版 P349页一段代码:
void biggies(vector<string> &wods, vector<string>::size_type sz)
{
elimDups(words); // 将words 按字典序排序,删除重复单词
stable_sort(words.begin(), words.end(), [](const stringh &a, const string &b) {
return a.size() < b.size(); });
// 获取一个迭代器,指向第一个满足size() >= sz 的元素
auto wc = find_if(words.begin(), words.end(), [sz](const string &a, const string &b)
{ return a.size() >= sz; });
// 计算满足 size >= sz 的元素的数目
auto count = words.end() - wc;
// 打印长度大于等于给定值的单词,每个单词后面接一个空格
cout << count << " " << make_plural(count, "word", "s")
<< " of length " << sz << " or longer" << endl;
for_each(wc, words.end(), [](const string &s){count << s << " ";});
count <<endl;
}
上面函数里面的find_if谓词用的是lambda表达式。假如c++ 11没有引入lambda表达式,上面的find_if就不能用了,因为不能把参数sz传入谓词。