Nie umiem <list> i iteratorów :)

Nie umiem <list> i iteratorów :)
A0
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:6
0

Aktualnie trenuje listy, i niestety nie umiem za dużo z nimi zrobić. Zatrzymałem się, gdy chciałem zamienić typ na klasę.
Mój kod:

Kopiuj
#include <iostream>
#include <list>

using namespace std;

class Klasa {
public:
    int liczba;
    std::string slownie;
 Klasa(int licz, std::string slown) : liczba(licz), slownie(slown) {};

 void test(){ std::cout << slownie;}

};

int main()
{
    list<Klasa> lista;
    lista.push_back(Klasa(1,"jeden"));
    lista.push_back(Klasa(2, "dwa")); 

    for( list<Klasa>::iterator iter=lista.begin(); iter != lista.end(); iter++ )
    {
       // std::cout<<*iter<<endl; // BOOM!!
       // **NIE WIEM CO TUTAJ ..**
       // JAK wyświetlić Klasa.slownie? 
       // Jak wywołać Klasa::test?
    }
}
Lucas Darkstorm
Lucas Darkstorm
  • Rejestracja:około 13 lat
  • Ostatnio:około 4 lata
2

Co tutaj? Wystarczy zrobić taki myk:

Kopiuj
for( list<Klasa>::iterator iter=lista.begin(); iter != lista.end(); iter++ )
{
       iter -> test() ;
}

Czyli odwołujesz się do obiektów klasy z poziomu wskaźnika / iteratora przy pomocy operatora ->.

edytowany 2x, ostatnio: Lucas Darkstorm
Shakaz
  • Rejestracja:ponad 10 lat
  • Ostatnio:10 miesięcy
  • Postów:184
0

@Lord Darkstorm
(*iter).test()
FTFY :)

Do autora wątku: do kodu dołącz <string> jeszcze.

edytowany 2x, ostatnio: Shakaz
Lucas Darkstorm
Lucas Darkstorm
Za późno - sam się poprawiłem ;p.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 17 godzin
  • Lokalizacja:Szczecin
6
Kopiuj
for( list<Klasa>::iterator iter=lista.begin(); iter != lista.end(); iter++ )

A po co tak teraz pisać?

Nie ładniej tak?

Kopiuj
for(auto it = begin(lista), e = end(lista); it != e; ++it){
    cout << it->slownie << ", ";
}

Albo jeszcze wygodniej:

Kopiuj
for(Klasa const& k : lista){
    cout << k.slownie << ", ";
}

Przy okazji: staraj się używać preinkrementacji (++it zamiast it++) jeśli to możliwe. Unikasz wtedy tworzenia zbędnych kopii, których kompilator nie zawsze może uniknąć.


edytowany 2x, ostatnio: kq
Zobacz pozostałe 4 komentarze
Azarien
jaką przewagę tutaj daje auto&amp;&amp; nad auto&amp;?
kq
Tak jak widać w linku powyżej, auto&amp;&amp; jest wynikowo auto const&amp; lub auto&amp; w zależności od tego, czy input jest const.
Lucas Darkstorm
Lucas Darkstorm
Czyli nie trzeba pamiętać, czy coś jest const czy też nie, jeżeli się użyje tego zapisu. Spoko opcja :).
kq
Bardzo polecam podlinkowny artykuł bądź prelekcję Scotta Meyersa. O ile nazwa uniwersalna referencja nie jest oficjalna, to wiele wyjaśnia.
Lucas Darkstorm
Lucas Darkstorm
Jasne, na pewno go przejrzę. Ja w sumie i tak muszę ogarnąć do końca C++11 i teraz nowy C++14. Mimo, że parę rzeczy z C++11 już umiem używać, to i tak jest jeszcze sporo do nauczenia.

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.