Usunięcie i zachowanie elementu vektoa

0

Witam

Pisze właśnie generator drzewa do algorytmu huffmana i chciałbym usunąć element z vektora ale zapisać do niego wskaźnik, jednak wyczytałem że erase() wywołuje destruktora obiektu. I o to właśnie moje pytanie czy jak ustawie wskaźnik do elementu vektora to będę miał do niego dostęp czy też nie koniecznie. Załączam przykładowy kod aby lepiej zilustrować moje intencje:

 

vector<int> v;

int *p = &v[3];
v.erase(v.begin()+3);

int a = *p; //bedzie cos tutaj czy nie koniecznie?

Z góry dzięki za wszelkie odpowiedzi.

0

Tak, nie, może. Dla intów jest duża szansa, że zadziała, jeżeli to jest ostatni element. Odwołujesz się jednak do miejsca do którego nie powinieneś, więc wyniki mogą być dowolne. Wrzucisz tam jakiś obiekt zamiast inta, to szansa segfaulta zacznie dążyć do 1. Powiedz co chcesz zrobić, a nie jak chcesz to zrobić.

0

Kardy element vektora jest struktura w której są 2 wskaźniki do takich właśnie struktur, w każdej iteracji zdejmuje z vektora 2 elementy (zazwyczaj ze środka) i dodaje na koniec nowy zawierający wskaźniki do tych 2 zdjętych.

0

Edit:
W efekcie ma powstać drzewo binarne złożone z elementów tego vektora. Cały algorytm wyboru i dodawania już mam pozostaje tylko problem usunięcia elementu vektora tak aby zachować go w pamięci.

0

Może użyj vector<shared_ptr<nazwa_struktury>> (shared_ptr jest w booscie i C++11).

0

A może coś takiego przejdzie?

 

vector<int> v;

int *p = new int();
*p = v[3];
v.erase(v.begin()+3);

int a = *p; //bedzie cos tutaj czy nie koniecznie?

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