Wymazanie elementów

0

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ę.

2

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.

0

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 :/

0

Pierwsze slysze o dodawaniu iteratorow. Czemu przypisujesz cos do iteratora ktory na nic nie pokazuje?

0

Ja też, ale chciałbym wymazać co k-ty element do momentu aż zostaną 2

0
for(list<T>::iterator it = myList.begin(), int i = 1; it != myList.end(); ++it, ++i)
    if(i % k == 0)
        MyList.erase(it);
0

Dzięki serdeczne :)

Dzięki serdeczne :)

Dzięki serdeczne :)

Dzięki serdeczne :)

0
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.

0

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

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