Jak utworzyć liste z iteratorów innych list?

Odpowiedz Nowy wątek
2014-12-15 18:38
0

Witam, mam dwie osobne listy, które zawierają wskaźniki do obiektów. Jeśli warunek zostanie spełniony to dwa aktualnie wskazujące obiekty przez iterator chce dodać do jednej wspólnej listy.

Poniższy kod dodaje ładnie elementy do listy, jednak problem jest potem przy zwalnianiu listy i usuwaniu jej, ponieważ jeden lista zawiera 3 te same wskaźniki, gdzie po usunięciu jednego z listy automatycznie usuwane są 2 pozostałe.

Jak moge inaczej dodać do wspólnej listy wskaźniki na obiekty które wskazuje aktualnie iterator?

void znajdz_laczenia_wycieczek()
    {
        wycieczka_objazdowa *m;
        wczasy_pobytowe *p;
        size_t znalezionaPozycja;
        string x, y;
        if (!lista_objazdow.empty() && (!lista_pobytow.empty()))
        {
            for (list<wycieczka*>::iterator it = lista_objazdow.begin(); it != lista_objazdow.end(); it++)
            {
                for (list<wycieczka*>::iterator it2 = lista_pobytow.begin(); it2 != lista_pobytow.end(); it2++)
                {
                    x = (*it)->zwroc_miasta();
                    y = (*it2)->zwroc_miasta();
                    int x2 = (*it)->zwroc_termin1();
                    int x1 = (*it2)->zwroc_termin1();
                    znalezionaPozycja = x.find(y);
                    if ((abs(x2 - x1) <= 2) && (znalezionaPozycja != string::npos))
                    {
                        lista.push_back((*it));
                        lista.push_back((*it2));
                    }
                }
            }
        }
    }
 

oraz zwalnianie list:

void zwolnij_pamiec_list()
    {
        if (!lista.empty())
        {
            for (list<wycieczka*>::iterator it = lista.begin(); it != lista.end(); it++)
                    delete (*it); // tutaj sie wysypuje
            lista.clear();
        }
        if (!lista_pobytow.empty())
        {
            for (list<wycieczka*>::iterator it = lista_pobytow.begin(); it != lista_pobytow.end(); it++)
                delete (*it);
            lista_pobytow.clear();
        }
        if (!lista_objazdow.empty())
        {
            for (list<wycieczka*>::iterator it = lista_objazdow.begin(); it != lista_objazdow.end(); it++)
                delete (*it);
            lista_objazdow.clear();
        }
 
    }
 
edytowany 1x, ostatnio: tomek631, 2014-12-15 18:39

Pozostało 580 znaków

2014-12-15 19:17
0
shared_ptr<>

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-15 19:41
0

Jak miało by to działać ? Jakaś większa podpowiedź? :>

Pozostało 580 znaków

2014-12-15 19:54
0

mam sczeszczyć dokumentacje?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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