就这个题目写的一个代码:问题在注释中
class Solution {
public:
int minLength(string s) {
vector<char>a;
for(char element:s){
a.push_back(element);
}
int k=0;
while(1){
for(int i=0;i<a.size()-1;i++){ /*这一行,如果是“CCDD",a.size()应该=0,那么判断条件就是i<-1,可调试时仍旧往下执行,读写不到a[i]而报错。*/
if(a[i]=='A'&&a[i+1]=='B'){
a.erase(a.begin()+i);
a.erase(a.begin()+i);
}
else if(a[i]=='C'&&a[i+1]=='D'){
a.erase(a.begin()+i);
a.erase(a.begin()+i);
}
}
if(k==a.size())
break;
k=a.size();
}
return a.size();
}
};
因为a.size()是无符号整数,无符号整数为0的时候 再-1就溢出了,变成无符号整数的最大值,所以在我以为a.size()-1=-1的时候,它仍旧往下执行,a已经空了,读取a[i]读不到而报错,
所有的数组的size()都是无符号整数。