• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Delete poprzez iterator

VPS Starter Arubacloud
0 głosów
174 wizyt
pytanie zadane 9 sierpnia 2015 w C i C++ przez criss Mędrzec (172,590 p.)
zamknięte 17 listopada 2016 przez criss

Mam kontener wskaźników i chciałbym usuwać je w pętli poprzez iterator. Tzn. for(auto it = kontener.begin(); it !=kontener.end() .... itd. Jest taka konieczność z tego powodu, że usuwając elementy kontenera zmieniam tym samym jego rozmiar. Tylko, że o ile kompilator jest w stanie przemielić to:
 

delete *it;

To już nie jest w stanie tego:
 

if( *it->member_function() ) ...

Kompletnie tego nie rozumiem dlaczego w pierwszym przykładzie odwołuję się do wskaźnika, a w drugim już nie :| Wyrzuca taki error:
request for member 'member_function' in '* it.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-><Monster**, std::vector<Monster*> >()', which is of pointer type 'Monster*' (maybe you meant to use '->' ?)|

Jeśli tego się nie da zrobić na iteratorach, to proszę o jakiś sposób na zrobienie tego bez nich.

komentarz zamknięcia: .

2 odpowiedzi

+1 głos
odpowiedź 9 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)
wybrane 9 sierpnia 2015 przez criss
 
Najlepsza
Powtórz priorytety operatorów -> ma wyższy niż * czyli najpierw próbuje wywołać metodę z obiektu, na który pokazuje iter i z tego wziąć dereferencje zrób (*it)->member_function()
komentarz 9 sierpnia 2015 przez criss Mędrzec (172,590 p.)
O kurde :D Przypomniało mi się teraz, że już kiedys już miałem podobny problem i zrobiłem tak jak poradziłeś teraz. Ale tym razem nie pomyślałem w ten sposób :c Dzięki wielkie!
0 głosów
odpowiedź 9 sierpnia 2015 przez Dorion300 Szeryf (90,250 p.)
A nie wystarczy samo "it->member_function()"?

oraz "delete it;"?
komentarz 9 sierpnia 2015 przez criss Mędrzec (172,590 p.)
Nie, przy delete it wyrzuca, ze oczekuje wskaźnika (a otrzymuje iterator), a przy it->memebr_function() nic się nie zmienia (to też podejrzane :| ).

Podobne pytania

0 głosów
2 odpowiedzi 433 wizyt
pytanie zadane 27 sierpnia 2015 w C i C++ przez criss Mędrzec (172,590 p.)
0 głosów
1 odpowiedź 166 wizyt
+1 głos
1 odpowiedź 188 wizyt
pytanie zadane 17 lipca 2019 w C i C++ przez niezalogowany

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...