Nie umiem <list> i iteratorów :)

Nie umiem <list> i iteratorów :)
A0
  • Rejestracja: dni
  • Ostatnio: dni
  • 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
  • Rejestracja: dni
  • Ostatnio: dni
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 ->.

Shakaz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 184
0

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

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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • 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ąć.

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.