请解释 for_each 函数在此 c++ 代码中的用法
Please explain the use of for_each function in this c++ code
我正在浏览 techiedelight 文章 link
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 是使用 shorthand.
的匿名类型函数对象
大致是shorthand:
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&
和 returns void
.
因此 for_each
对传递的范围的每个元素(在本例中为字符串)调用此函数对象。
我正在浏览 techiedelight 文章 link
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 是使用 shorthand.
的匿名类型函数对象大致是shorthand:
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&
和 returns void
.
因此 for_each
对传递的范围的每个元素(在本例中为字符串)调用此函数对象。