[C++] Algorytm STL - for_each

0

Witam,

Mógłby mi ktoś powiedzieć co jest źle w tym kodzie ?

Mam dwa kontenery :

vector <wiersz> kontener_z_wierszami ;
vector<komorka> kontener_z_komorkami ;

I teraz chce aby w momencie usuwania elementu z vectora kontener_z_wierszami były też zwalniane elementy z vectora kontener_z_komorkami. Muszę do tego celu zastosować ALGORYTM STL (z biblioteki algorithm.h)
Napisałem takie coś :

void tabela::usun_wiersz(int numer)
{
	for(int i=0; i<liczba_kolumn; i++)
	{
		for_each(kontener_z_wierszami[numer].kontener_z_komorkami.begin(), kontener_z_wierszami[numer].kontener_z_komorkami.end(), kontener_z_wierszami[numer].kontener_z_komorkami.pop_back()) ;
	}
}

no i przy próbie kompilacji wyskakuje mi błąd:
error C2784: '_Fn1 std::for_each(_InIt,_InIt,_Fn1)' : could not deduce template argument for '_Fn1' from 'void'

0

No niestety dalej nie wiem jak zmienić ten kod :(
Mógłby mi ktoś to wytłumaczyć łopatologicznie ?
Będę bardzo wdzięczny.

0

Nie rozumiesz zasady działania algorytmu for_each. Kwintesencją tego algorytmu jest wywołanie funkcji, którą przekazujesz jako 3 argument, na każdym elemencie kolekcji, po której przechodzi algorytm.

Załóżmy taki przykład:

masz vector:

std::vector<int> moje_liczby;

Załóżmy, że znajdują się w nim liczby od 1 do 10.

Teraz napiszmy sobie prostą funkcję:

void increment(int& x)
{
    ++x;
}

Na koncu wywołujemy for_each:

std::for_each(moje_liczby.begin(), moje_liczby.end(), increment);

Algorytm na każdym elemencie vectora moje_liczby wywołuje naszą w funkcję. W efekcie będziemy mieli w naszym vectorze liczby od 2 do 11.

Przemyśl jeszcze raz dokładnie co masz zrobić, a później się zastanów jak najlepiej wykorzystać for_Each w Twoim problemie.

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