Usuwanie el. listy

0

Witam, próbuję zrobić funkcję, która usuwa z list dany ciąg liczb M, potem dwie następne liczby zostawia i znowu usuwa (Tak do końca listy). W czasie działania tej funkcji dostaję error: Expression: list iterator not incrementable. Co mam poprawić?

void UsunCiagi(list<int> &l, int M)
{
	list<int>::iterator v=l.begin();
	list<int>::iterator w=l.begin();
	for (int i=0; i < M; ++i)
		++w;
	int zm=2;
//NARAZIE NIE DODAJE PĘTLI, PONIEWAŻ MUSZĘ TO OGARNĄĆ
	if(zm==2){
		l.erase(v, w);
		zm=0;
	}
	else
	++zm;
	++v;
	++w;
}
 
0

Nie rozumiem z opisu co ta funkcja ma robić.

Np. dla ciągu
4 4 4 4 4 4 5 4 5 4 5 4 4 5 4 5 4 5 4 5
przy M = 4
usuwa ciąg M (czwórek)
_ _ _ _ _ _ 5 4 5 4 5 4 4 5 4 5 4 5 4 5
potem zostawia dwie liczby (ale równe M czy dowolne? zakładam równe M) i znowu usuwa
_ _ _ _ _ _ 5 4 5 4 5 _ _ 5 4 5 4 5 _ 5
O to chodzi?

0

Zestaw liczb wejściowych: 4, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, (el. tej listy) po użyciu tej funkcji dla M = 3.
4, 3, 3, 3, 3, **2, 2, 1, ** 1, 1, 1
Otrzymamy ciąg: 3, 3, 1, 1 (obcięło po 3 liczby, dwie przerwy znowu trzy..)

3

Przy używaniu erase() tracisz iterator. Zapoznaj się z tym, co zwraca funkcja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1