2014-04-07 3 views
0

Что это значит и как это работает?Как объяснить array [value - 'a']

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

Метод плохого человека для преобразования 'a',' b', 'c' и т. Д. В' 0', '1',' 2' и т. Д. –

+0

'a' - это код 97 в ascii ... –

+3

Какую часть вы не понимаете? Часть 'if (...)'? 'IntVec [v.at (i) - 'a'] == 0' часть? Часть 'v.at (i) - 'a''? Часть 'v.at()'? Часть '' a''? '' '' Часть? –

ответ

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+ слотов неиспользованный и потраченный впустую. Карта - это еще один вариант, но также имеет накладные расходы. –