请解释这段C++代码中std::for_each函数及对应lambda表达式的作用
Lambda表达式运行原理说明
[&m](char &c) { m[c]++; } 是C++11标准引入的Lambda匿名函数,作为std::for_each的第三个参数,定义了遍历字符串每个元素时的执行逻辑,结构拆分解析如下:
- 第一部分
[&m]是捕获列表:
声明当前Lambda需要引用捕获外部作用域的std::unordered_map<char, int>类型变量m,&符号表示按引用传递,Lambda内部可以直接修改原变量m的内容,不会产生拷贝开销。 - 第二部分
(char &c)是参数列表:
和普通函数的参数定义规则一致,std::for_each遍历字符串的过程中,会将当前遍历到的字符的引用传入该参数,c就代表当前正在处理的单个字符。 - 第三部分
{ m[c]++; }是函数体:
是Lambda的实际执行逻辑:以当前字符c作为键,将m中对应键的计数值加1。如果c是第一次作为键出现在m中,unordered_map的[]运算符会自动插入该键,默认将对应值初始化为0后再执行自增,最终值为1,正好满足字符频次统计的需求。
整句std::for_each执行完成后,m中会存储字符串abcba的字符频次统计结果:a:2、b:2、c:1。
内容的提问来源于stack exchange,提问作者Sourabh Singh
相关产品推荐
相关产品推荐

