Przy usuwaniu ze zbioru SET pojawiają się dziwne dane

Odpowiedz Nowy wątek
2011-10-07 17:59
aleksuss
0

Witajcie drodzy forumowicze,
posiadam tak prosty i krótki fragment kodu programu]

 for (c=liczby.begin(); c!=liczby.end(); ++c){
                    cout << *c << ". ";   //!!!!!!!!!!!!!!!!
                    if(*c/2>5)     
                       liczby.erase(*c);
               }

, który jest dla mnie niezwykle uciążliwy. Przy wypisaniu całości zbioru przed operacją usuwania wszystko jest jak należy i zbiór jest kompletny bez "śmieci". Po usunięciu jakiegoś elementu zbioru w zaznaczonym miejscu wypisuje mi dziwnie duże liczby, których nigdy nie dodałem do zbioru i nie wiem skąd się wzięły, a skoro ich nie ma w zbiorze powstaje błąd. Wiecie co może być przyczyną? Proszę o pomoc...

Pozostało 580 znaków

2011-10-07 18:06
0

Jeśli wykonasz erase() to iterator z tego elementu ci się psuje. Nie wolno robić tego co właśnie zrobiłeś. Rozwiązanie?

  • Przepisuj dobre liczby do nowego zbioru a potem stary usuń
  • cofaj iterator o 1 przed usunięciem liczby

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2011-10-07 18:09
0

Dodatkowo zepsuć iterator może zmiana jakiegoś elementu, dodanie nowego, ponieważ set jest wewnętrznie zawsze posortowany.


Pozostało 580 znaków

2011-10-07 18:11
aleksuss
0

Dziękuje Wam bardzo za porady. Już biorę się za poprawę kodu i testowanie.

Apropo tej struktury, to istnieje jakaś inna podobna, bądź potrafiąca zastąpić ją ale o wiele szybsza (szybkie usuwanie ze struktury i jej przeszukiwanie)?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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