Tôi có một trình vòng lặp danh sách đi qua một danh sách và loại bỏ tất cả các số chẵn. Tôi có thể sử dụng trình vòng lặp danh sách để in ra các con số tốt nhưng tôi không thể sử dụng remove() của danh sách và chuyển vào trình lặp lặp lại không quan tâm.Danh sách Iterator Remove()
Tôi nhận thấy rằng khi lệnh remove() có hiệu lực, * itr bị hỏng? Ai đó có thể giải thích điều này?
#include <iostream>
#include <list>
#define MAX 100
using namespace std;
int main()
{
list<int> listA;
list<int>::iterator itr;
//create list of 0 to 100
for(int i=0; i<=MAX; i++)
listA.push_back(i);
//remove even numbers
for(itr = listA.begin(); itr != listA.end(); ++itr)
{
if (*itr % 2 == 0)
{
cout << *itr << endl;
listA.remove(*itr); //comment this line out and it will print properly
}
}
}
Tôi phải chỉ ra rằng các trình lặp STL không có bất kỳ sự phụ thuộc nào về độ dài của cấu trúc. Iterator khá thường xuyên cho phép bạn xóa các phần tử nhất định, ví dụ vòng lặp vector cho phép bạn xóa các mục qua trình vòng lặp và danh sách các trình vòng lặp cho phép bạn xóa bất kỳ thứ gì không được chỉ định bởi trình vòng lặp –