C++中Vector(向量)使用erase時應該注意的事項
阿新 • • 發佈:2019-01-06
在使用Vector中,如果使用erase不小心,很容易陷入無限迴圈.如下:
//向陣列中新增一個元素
MyArray.push_back(8);
vector<unsigned short>::iterator it = MyArray.begin();
for (;it != MyArray.end();it++)
{
if (*it == 8)
{
MyArray.erase(it); //刪除陣列中的元素
}
}
注意:在宣告
protected:
vector<unsigned short> MyArray;
的標頭檔案中要加入
#include<vector> using namespace std;
本意是要遍歷向量,找到是8的元素,將其刪除。但是,上面程式碼卻陷入了無限迴圈。原因是向量的erase會返回下一個元素的位置,這樣的話,會讓it加兩次,從而跳過了it != MyArray.end().
所以應該將上述程式碼修改為:
MyArray.push_back(8); vector<unsigned short>::iterator it = MyArray.begin(); for (;it != MyArray.end();) { if (*it == 8) { MyArray.erase(it); //刪除陣列中的元素 } else it++; }