C++使用std :: map计算实例/直方图

pap*_*jam 4 c++ map histogram

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

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);
Run Code Online (Sandbox Code Playgroud)

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

Ker*_* SB 6

确实这是map有效的:[]-operator是变异的,如果它还不存在,将创建映射类型的对象.由于size_t价值初始化为零,你一切都很好.


Rob*_*obH 5

引用MSDN:

如果使用默认构造函数语法进行实例化,则POD和标量类型将始终为零初始化.

因此,假设map使用默认构造函数在缺少的键处创建新条目,则yes,size_t将初始化为零.