1. 程式人生 > >關於Vector刪除末尾末尾元素時出現的怪現象

關於Vector刪除末尾末尾元素時出現的怪現象

此段程式碼是刪除連續三個不符合規則的vector元素,情況是三個連續不符合規則的元素位於vector的末尾,當檢查到最後一個元素時,正好累計到三個連續不符合規則的元素,此時對三個元素進行刪除操作,因為此時for迴圈i的值已經為14(元素共15個),所以博主本來打算採用刪除i-2也就是14-2=12的方式進行刪除,但是程式碼刪除到最後一個erase語句時會出現錯誤,顯示指標越界了。目前不清楚為什麼會這樣。錯誤如圖:


			if (errorH == 3 && (i<0.3*rects.size() || i>0.7*rects.size())){
				cout << "連續出現三個高度過短矩形,視為噪點刪除" << endl;
				rects.erase(rects.begin() + i - 2);
				rects.erase(rects.begin() + i - 2);
				rects.erase(rects.begin() + i - 2);
				i--;//記得將i轉到刪除前的序號值
				i--;
			}
		}

超找了許久原因,依然沒有發現問題的真正所在,遂修改程式碼刪除方式,之後成功執行。
//===連續出現三個不規則矩形時判定其為噪點
			errorH++;
			if (errorH == 3 && (i<0.3*rects.size() || i>0.7*rects.size())){
				cout << "連續出現三個高度過短矩形,視為噪點刪除" << endl;	
				i--;//轉到第一個噪聲的序列號
				i--;
				rects.erase(rects.begin() + i);
				rects.erase(rects.begin() + i);
				rects.erase(rects.begin() + i);	
				i--; //此處是將i的值跳轉到三個噪聲之前,繼續進行for迴圈
				continue;
			}