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

时间:2011-11-04 14:27:46

标签: 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);

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

2 个答案:

答案 0 :(得分:6)

确实这就是map的工作原理:[] - 运算符正在变异,并且创建映射类型的对象(如果它尚不存在)。由于size_t值初始化为零,所以你一切都很好。

答案 1 :(得分:5)

引用MSDN

  

POD and scalar types will always be zero initialized if instantiated with the default constructor syntax.

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