今天寫代碼的時候,發現了一個錯誤,源代碼如下
for(unsigned i = 0;i!=s.size();++i)
{
cout << s.size() <<endl;
if(s[i] >= 'A' && s[i] <= 'Z')
{
s[i] -= ('A' - 'a');
}
else if(s[i] == '.' )
{
s.erase(i,1);
}
}
在循環中,我用不等於來限定循環的範圍,結果運行的時候出錯,強制關閉,調試過程中,發現,i的值跳變到了size之外
576已經遠大於size的值,所以程序進入了死循環,這就是“!=”的缺陷,當循環值跳出範圍之外,循環程序無法檢測出來,但是《c++ primer》中介紹,對於迭代器的循環操作,使用“!=”要比“<”更合適,這也是由迭代器的特性決定的,泛型算法的一些操作會使迭代器失效,但是迭代器和end()的關係可以用“!=”清晰表示,所以,在循環中,應該區別對待,涉及迭代器的循環操作用“!=”,對於普通情況,使用“<”邏輯上更保險。