请解释 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 对传递的范围的每个元素(在本例中为字符串)调用此函数对象。