c++计数实例/直方图使用std::map

C++ counting instances / histogram using std::map

本文关键字:std map 直方图 实例 c++      更新时间:2023-10-16

我见过类似下面的示例代码:

std::string s = "Hello World!";
std::map<char, std::size_t> h;
for (std::string::const_iterator i=s.cbegin(); i!=s.cend(); ++i)
{
    ++h[*i];
}
assert(h['l'] == 3);

这似乎依赖于值类型在每个字母第一次出现时归零。即使使用没有默认构造函数将其重置为零的std::size_t之类的东西,也能保证这一点吗?

确实,这就是map的工作原理:[] -操作符正在发生变化,如果还不存在,则将创建映射类型的对象。由于size_t值初始化为零,所以您都可以。

引用MSDN:

如果实例化,

POD和标量类型将始终为零初始化使用默认构造函数语法。

因此,假设map使用默认构造函数在缺失的键处创建新项,那么yes, size_t将初始化为零。