这样的匹配是用了栈的思想。
if( vec.back()-1 == *(vec.end()-2) || vec.back()-2 == *(vec.end()-2)){
vec.pop_back();
vec.pop_back();
}
查一下ASCII码的表,你会发现
(和)的码值差1
[和],{和}码值差2
()与[]{}的值差得很远
vec.back()-1 == *(vec.end()-2是用vec中的最后一个元素值减1和vec中倒数第二个元素比较,如果相等,说明这是(),配对成功,让配对元素出栈,继续检查下面的字符
同理,vec.back()-2 == *(vec.end()-2)是用vec中的最后一个元素值减2和vec中倒数第二个元素比较,如果相等,说明这是[]或{},配对成功,让配对元素出栈,继续检查下面的字符