请解释一下for_each函数在这段c++代码中的用法



我正在浏览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(在本例中为字符串)的每个元素调用此函数对象。

相关内容

  • 没有找到相关文章

最新更新