這段代碼看起來很好,默認值爲value_type
(int
)爲0;它適用於所有情況嗎?std :: map <string,int>默認初始化值
std::map<std::string,int> w;
for (const auto& t: str)
w[t]++;
什麼雙? 地圖?默認0.0?
這段代碼看起來很好,默認值爲value_type
(int
)爲0;它適用於所有情況嗎?std :: map <string,int>默認初始化值
std::map<std::string,int> w;
for (const auto& t: str)
w[t]++;
什麼雙? 地圖?默認0.0?
是的,這段代碼適用於任何類型的密鑰,包括double
。原因是非const operator []
返回一個參考到鍵的值,而不是該值的副本。這就是++
運算符應用的引用。
的代碼片段顯示您的工作方式如下:
str
容器string
類型的每個關鍵t
,w
中搜索給定鍵int&
初始化爲零)被返回給調用者++
運算符應用於從[]
返回的參考,這改變0
到1
(或0.0
到1.0
等)是的。當您在地圖上使用[]
-operator並且不存在具有所需鍵的元素時,會插入一個新元素,該元素將進行值初始化。對於整數,這意味着初始化爲零。
它適用於所有情況嗎?
對於所有情況,新密鑰將與初始化爲T()
的值相關聯。
當T
是內置或Plain Old Data類型,如int
或double
,評估爲零。
當T
是一個類時,地圖將嘗試調用空的構造函數。
如果這個類有一個默認的構造函數。否則它將無法編譯。 – andrjas 2013-04-23 19:35:52
我不明白你在問什麼。你能改說嗎? – 2013-04-23 19:27:14
對不起,感到困惑。下面的答案是非常有幫助的。 – wenfeng 2013-04-23 20:40:14