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

Auto(typ zastepczy), rozwianie wątpliwosci

Object Storage Arubacloud
0 głosów
206 wizyt
pytanie zadane 29 sierpnia 2018 w C i C++ przez Poczprogramista123 Bywalec (2,900 p.)

Witam. Prosił bym o odpowiedzenie na te dwa pytanka :)

1. Sam sens typu zastępczego auto czaje. Przyjmuje typ na podstawie wartosci jaki do niej przypisujemy,ale prosił bym o wytłumaczenie tej petli.

        for(auto i:owocki)///owocki sa lista przechowujaca wskaznik do obiektu OWOC
        {
            /*JAKIES CZYNNOSCI*/
            if(i->pozycja==gra->POZSUPEROWOCKA[j])
           /*JAKIES CZYNNOSCI*/
           window.draw(*i);
          
        }

I glównie chodzi mi o zapis auto: owocki. Nigdzie nie znalazłem wytłumaczenia. Ta pętla działa dobrze tylko nie czaje jak dziala. Domyslam sie a właściwie to chyba musi tak być, że ten zapis sam iteruje iterator(dobrze rozumiem ?) i przyjmuje wartosć tego co przechowuje dany element listy.

2. Czym różnią się te dwie pętle(I kilka słów wyjaśnienia o tym iteratorze, jest on wskaznikiem do elementu listy?)

for(auto i=owocki.begin();i!=owocki.end();)
{
    OWOCEK *a=*i;
    if(a->owocekzjedzony){i=owocki.erase(i);delete a;}
    else {i++;}
}

///A TYM

for(auto i=owocki.begin();i!=owocki.end();i++)
{
    OWOCEK *a=*i;
    if(a->owocekzjedzony){i=owocki.erase(i);delete a;}
}

Dziekuje za odpowiedz.

komentarz 29 sierpnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Na pierwsze pytanie juz znalazłem odpowiedz, ale na drugie bedę wdzieczny.
komentarz 29 sierpnia 2018 przez mokrowski Mędrzec (155,700 p.)

@Poczprogramista123, możesz mi powiedzieć gdzie znalazłeś tłumaczenie:

auto -> typ zastępczy?

komentarz 29 sierpnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Kurs cpp0x

2 odpowiedzi

0 głosów
odpowiedź 29 sierpnia 2018 przez profesorek96 Szeryf (91,420 p.)

Ta pętla co pytasz się w pierwszym to tzw. pętla zakresowa. Dostajesz elementy z tego obiektu po którym iterujesz. Ciekawostką jest że jeśli zapiszesz tak

for(auto &i: TAB)
{
//Jest możliwe zmiana elementów tablicy

}

 

komentarz 29 sierpnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Wielkie dzieki
0 głosów
odpowiedź 29 sierpnia 2018 przez monika90 Pasjonat (22,940 p.)
edycja 29 sierpnia 2018 przez monika90
for(auto i=owocki.begin();i!=owocki.end();)
{
    OWOCEK *a=*i;
    if(a->owocekzjedzony){i=owocki.erase(i);delete a;}
    else {i++;}
}
 
///A TYM
 
for(auto i=owocki.begin();i!=owocki.end();i++)
{
    OWOCEK *a=*i;
    if(a->owocekzjedzony){i=owocki.erase(i);delete a;}
}

Druga wersja jest błędna: pominie element, który znajduje się zaraz po usuniętym (zawsze wykonywane i++ go przeskoczy). A gdy zdarzy się usunięcie elementu z samego końca kontenera, to wykona inkrementację na iteratorze równym owocki.end(), co jest niezdefiniowanym zachowaniem.

Iterator listy nie jest wskaźnikiem, jest to typ zdefiniowany przez bibliotekę standardową, ale z operacjami wzorowanymi na tych które udostępniają wskaźniki, czyli dereferencja, inkrementacja, dekrementacja, porównanie: *, ++, --, ==, !=.

komentarz 29 sierpnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Wielkie dzieki
komentarz 29 sierpnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Ale dopytam. Iterator przechowuje wskaznik do elementu listy? Przeciez inaczej nie moze sie chyba do niego dostać.
komentarz 29 sierpnia 2018 przez monika90 Pasjonat (22,940 p.)
Raczej przechowuje wskaźnik do węzła listy, węzeł zaś zawiera wskaźniki do poprzedniego i następnego węzła oraz sam element.

Ale mógłby przechowywać wskaźnik do elementu i na jego podstawie uzyskać wskaźnik do węzła, adresy te różnią się tylko o pewną stałą, więc jak znasz jeden to znasz też drugi.
komentarz 29 sierpnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Dzieki

Podobne pytania

+2 głosów
1 odpowiedź 1,263 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
+2 głosów
2 odpowiedzi 803 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
3 odpowiedzi 2,537 wizyt
pytanie zadane 11 sierpnia 2016 w C i C++ przez sprytny22 Obywatel (1,130 p.)

92,628 zapytań

141,490 odpowiedzi

319,861 komentarzy

62,010 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...