2014-04-07 42 views
0

這是什麼意思?它是如何工作的?如何解釋數組[值 - 'a']

if (intVec[v.at(i) - 'a'] == 0) 
+0

窮人的方法轉換'a','b','c'等等到'0','1','2'等等 –

+0

'a'是ascii代碼中的97 ... –

+3

你不瞭解什麼部分? 'if(...)'部分? intVec [v.at(i) - 'a'] == 0'部分? 'v.at(i) - 'a''部分? 'v.at()'部分? 'a'部分? '-'部分? (intVec [v.at(i) - 'a'] == 0) { intVec [v .at(i) - 'a'] == 0) –

回答

3

假設v包含的字符'a''b''c'等,

v.at(i) - 'a' 

減去從這些字符'a'

'a' - 'a' == 0 
'b' - 'a' == 1 
'c' - 'a' == 2 

等等。

+0

而你之所以這樣做的原因是:它可以讓你比較其他方法相對有效地存儲對應於一系列鍵的數據值。其他選項包括大小爲256的矢量,並訪問與字符原始值相對應的插槽(例如'char c ='a'; intVec [c] = 1;'),但如果您只關心字母az,則200+個插槽是未使用和浪費。地圖是另一種選擇,但它也有開銷。 –