1. 程式人生 > >C++中Vector(向量)使用erase時應該注意的事項

C++中Vector(向量)使用erase時應該注意的事項

在使用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++;
	}