Iteratory w listach C++

0

Siemano

W trakcie pisania programu napotkałem pewien problem. otóż:

  • utworzyłem sobie pewną klasę Macierz i chciałem zbudować listę w oparciu o STL, w ten sposób:
list<Macierz> Zbior;

Niestety przy dodawaniu elementów do tej listy przy pomocy metody push_back() (zakończonym sukcesem) wykonywał się konstruktor obiektu klasy Macierz i zaraz po tym jego destruktor, co jest tutaj zjawiskiem z goła nieporządanym.

Dlatego postanowiłem sprawę rozegrać w ten sposób:

list<Macierz*> Zbior;

Macierz* TMP;
TMP = new Macierz(Nazwa, LiczbaWierszy, LiczbaKolumn);
Zbior.push_back(TMP);
TMP = NULL;

Obiekty są dodawane do listy i wykonuje się tylko konstruktor.
Jednak kolejny problem pojawił się przy próbie uzyskania danych.

Tworzę iterator:

list<Macierz*>::iterator iterator_listy;

A dalej pętla:

for(iterator_listy=Zbior.begin(); iterator_listy!=Zbior.end(); iterator_listy++){
//Zawartość
}

Próbowałem jakoś odpowiednio ustawić "zawartość" pętli, ale jedyne co mi się udało uzyskać, to adres w pamięci tej macierzy...

Ktoś ma jakiś pomysł?

0

iterator jest czymś co można traktować jak wskaźnik więc żeby dostać się do zawartości iteratora w tym przypadku trzeba zrobić podwójną dereferencję: ** lub (*iter)->metoda.

Powiedz o co chodziło dokładnie z tym destruktorem. Kontenery STL robią różne sztuczki z obiektami, które przechowują w tym np. realokacja pamięci, może dlatego destruktor był wywoływany. Czy mogłeś się po push_backu odwoływać do tych elementów?
Z drugiej strony w liście nie powinna następować żadna realokacja.

0

Jesteś boski :D
Działa!

Błąd popełniałem taki
*(iter)->metoda

a tutaj taki psikus...
dzięki :) mogę wrócić do pracy :)

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