C++中,在循環中用“!=”與“

今天寫代碼的時候,發現了一個錯誤,源代碼如下

    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()的關係可以用“!=”清晰表示,所以,在循環中,應該區別對待,涉及迭代器的循環操作用“!=”,對於普通情況,使用“<”邏輯上更保險。

發佈了41 篇原創文章 · 獲贊 33 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章