我正在浏览techiedelight文章链接
我不明白std::for_each(s.begin(), s.end(), [&m](char &c) { m[c]++; });
中[&m](char &c) { m[c]++; }
的含义
#include <iostream>
#include <unordered_map>
#include <algorithm>
int main()
{
std::unordered_map<char, int> m;
std::string s("abcba");
std::for_each(s.begin(), s.end(), [&m](char &c) { m[c]++; });
char ch = 's';
if (m.find(ch) != m.end()) {
std::cout << "Key found";
}
else {
std::cout << "Key not found";
}
return 0;
}
谁来解释一下它是如何工作的。提前谢谢。
[&m](char &c) { m[c]++; }
这是一个lambda。lambda是使用简写的匿名类型函数对象。
大致是:
struct anonymous_unique_secret_type_name {
std::unordered_map<char, int>& m;
void operator()(char& c)const {
m[c]++;
}
};
std::for_each(s.begin(), s.end(), anonymous_unique_secret_type_name{m} );
[&m](char &c) { m[c]++; }
既创建了类型又构造了实例。它捕获(通过引用)变量m
,并在其主体中将其公开为m
。
作为一个类函数对象(又名函数对象),它有一个operator()
,可以像函数一样调用。这里,operator()
接受char&
,返回void
。
因此,for_each
对传递的range(在本例中为字符串)的每个元素调用此函数对象。