std :: map <string,int>默认初始化值

wen*_*eng 4 c++ initialization std

这段代码似乎运行良好,默认值为they value_type(int)为0; 它适用于所有情况吗?

std::map<std::string,int> w;
for (const auto& t: str)
   w[t]++;
Run Code Online (Sandbox Code Playgroud)

双倍呢?地图?默认为0.0?

Ker*_* SB 7

是.在[]地图上使用-operator并且不存在具有所需键的元素时,将插入一个值初始化的新元素.对于整数,这意味着初始化为零.


das*_*ght 6

是的,此代码适用于任何类型的密钥,包括double.这样做的原因是非const operator []返回对键值的引用,而不是该值的副本.这是++运营商应用的参考.

您显示的代码片段的工作方式如下:

  • 对于每一个键t类型的stringstr容器中,
  • w搜索地图以查找给定的密钥
  • 由于该条目不存在,因此将新的一个插入到地图中
  • 由于条目的键是已知的,但值不是,因此创建了值的默认(值初始化,ei 0for int)对象
  • 对新创建的对象的引用(在这种情况下,int&初始化为零)将返回给调用者
  • ++操作者施加到从返回参考[],它改变01(或0.01.0等)

  • @Alexey 区分“int”的默认初始化和值初始化非常重要。如果你写‘int x;’,那么‘x’是默认初始化的,这对于‘int’来说意味着“不执行初始化”,因为它是一个POD类型。如果您编写 `int x = int()`,这就是容器所做的事情(除了容器的 `T x = T()`,因为它们是模板),然后 `x` 被初始化为整数零。 (2认同)