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
Bài liên quan
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