http://ideone.com/2kVcF
Czy mógłby ktoś zerknąć do kodu i napisać co jest źle. Chodzi wymazanie wszystkich elementów z wyjątkiem dwóch ostatnich. Za pomoc dziękuję.
Po wyrzuceniu elementu, iterator staje się nieważny, nie można na nim już nic wykonywać - nie wskazuje on na żaden element, nie ma więc elementu następnego.
erase
zwraca jednak iterator na element następny od usuniętego. Przypisz więc it
do wyniku wywołania tej metody i usuń it++
z fora.
Dzięki pomogło. Proszę jeszcze o pomoc w jedenej kwesti, mianowicie chciałbym wymazać co 3 element do momentu aż zostaną 2 ostatnie. Zrobił tak http://ideone.com/2kVcF ale dodanie do it + k nie przeszło :/
Pierwsze slysze o dodawaniu iteratorow. Czemu przypisujesz cos do iteratora ktory na nic nie pokazuje?
Ja też, ale chciałbym wymazać co k-ty element do momentu aż zostaną 2
for(list<T>::iterator it = myList.begin(), int i = 1; it != myList.end(); ++it, ++i)
if(i % k == 0)
MyList.erase(it);
Dzięki serdeczne :)
Dzięki serdeczne :)
Dzięki serdeczne :)
Dzięki serdeczne :)
MJay napisał(a)
for(list<T>::iterator it = myList.begin(), int i = 1; it != myList.end(); ++it, ++i)
if(i % k == 0)
MyList.erase(it);
Rev napisał(a)
Po wyrzuceniu elementu, iterator staje się nieważny, nie można na nim już nic wykonywać - nie wskazuje on na żaden element, nie ma więc elementu następnego.
:P
Już nie mówiąc o tym, że nie można deklarować kilku różnych typów na raz w pętli for.
Oczywiście, że to co napisałem jest złe. Totalny brak myślenia. Jeżeli chcesz wymazać co drugi element to wpisujesz
for(List<T>::iterator it = myList.begin(); it != myList.end(); ++it)
myList.erase(it++);
To usuwa co drugi element
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.