01/10/2018, 13:25

Xóa phần tử trong vector C++

Em có một đoạn hàm xóa sau ạ

 for (int i = 0; i < mh.size(); i++)
	{
		s = mh[i]->getID(); 
		if (s[0] == 'F')
		{
			double k = mh[i]->getSo(); 
			double s1 = so - k; 
			if (s1 > 0)
			{
				mh.erase(mh.begin() + i);
				i--;
			}
		}
	}

Em chạy đoạn code này thì vẫn xóa bình thường như ngay sau lúc đó nó cứ báo là “vector subscript out of range”
Làm sao để khắc phục ạ, em xin cảm ơn mọi người

Tên Gì Cũng Được viết 15:38 ngày 01/10/2018

theo mình đọc sơ qua thì hiểu là
bạn xóa phần tử trong mảng, thì cái size đã khác

ví dụ ban đầu có 8 phần tử
bạn xóa xóa xóa hết 3 cái, lúc này thì size của mảng chỉ còn lại 5 nên khi chạy tới i=6 sẽ lỗi
for (int i = 0; i < mh.size(); i++)
mh.size() ở câu trên ấn định cái size ngay từ đầu là 8 luôn chứ ko phải mỗi lần lặp mỗi lần tính đâu

giải pháp: for (int i = mh.size() - 1; i >= 0); i–)
hoặc dùng while

Bài liên quan
0