Rimuovere un oggetto da una struct (C++)

Pubblicità

KrounNous

Utente Attivo
Messaggi
195
Reazioni
12
Punteggio
38
Ciao ! Ho fatto questo script in c++ per rimuovere un oggetto da una struct, ma non rimuove nulla.
Codice:
struct MAGAZZINO{
 string NomeOggetto;
 int Quantita;

};

MAGAZZINO Lista[GrandezzaMagazzino];
MAGAZZINO * mag;
.....
mag = new MAGAZZINO[pos];
.....
delete[] mag;
mag = NULL;

- - - Updated - - -

UP!!
Nessuno puo aiutarmi ? Grazie...
 
Non mi è molto chiaro quello che fai.
Io vedo un vettore di strutture di tipo MAGAZZINO (Lista) e un puntatore (mag) a un altro vettore di lunghezza pos allocato con new.
Il delete[] dealloca l'intero array puntato da mag, non i singoli elementi come mi pare voglia fare tu.
Per avere il controllo sui singoli elementi ti conviene usare un array di puntatori a strutture di tipo MAGAZZINO e a quel punto fai un ciclo per le new e fai il delete dei singoli elementi.
 
Non mi è molto chiaro quello che fai.
Io vedo un vettore di strutture di tipo MAGAZZINO (Lista) e un puntatore (mag) a un altro vettore di lunghezza pos allocato con new.
Il delete[] dealloca l'intero array puntato da mag, non i singoli elementi come mi pare voglia fare tu.
Per avere il controllo sui singoli elementi ti conviene usare un array di puntatori a strutture di tipo MAGAZZINO e a quel punto fai un ciclo per le new e fai il delete dei singoli elementi.

Grazie per la tua risposta! Avevo fatto un po di confusione...
Potrei fare una cosa del genere o è sbagliato anche questo metodo?

struct MAGAZZINO
{
string NomeOggetto;
int Quantita;
};

MAGAZZINO * mag[GrandezzaMagazzino];
MAGAZZINO Lista[GrandezzaMagazzino];
.....
for(int i = 0; i < GrandezzaMagazzino; i++)
{
mag = & Lista;
}
.....
int z = PosizioneDellOggettoDaEliminare;
if(mag[z]->Quantita == 0)
{
delete mag[z];
}

Non penso sia giusto...
 
Ultima modifica:
Mmmh non sono un guru del c++ ma così ad occhio il codice non mi convince.
Io farei una cosa del genere:
Codice:
MAGAZZINO** Lista = new MAGAZZINO*[n];   //n = grandezza magazzino

//inizializzazione di un elemento in posizione i
Lista[i] = new MAGAZZINO();
Lista[i]->NomeOggetto = "Carta";
Lista[i]->Quantita = 10;

//eliminazione di un elemento in posizione i
delete Lista[i]
Ovviamente tu ci puoi fare tutti i cicli che vuoi per allocare e deallocare.
Tuttavia penso che la deallocazione sia meglio farla quando sai che il valore di quantità viene impostato a 0 per i singoli elementi nella lista, non è per nulla efficiente ciclare "alla cieca" l'array per cercare gli elementi con quantità = 0.
 
Mmmh non sono un guru del c++ ma così ad occhio il codice non mi convince.
Io farei una cosa del genere:
Codice:
MAGAZZINO** Lista = new MAGAZZINO*[n];   //n = grandezza magazzino

//inizializzazione di un elemento in posizione i
Lista[i] = new MAGAZZINO();
Lista[i]->NomeOggetto = "Carta";
Lista[i]->Quantita = 10;

//eliminazione di un elemento in posizione i
delete Lista[i]
Ovviamente tu ci puoi fare tutti i cicli che vuoi per allocare e deallocare.
Tuttavia penso che la deallocazione sia meglio farla quando sai che il valore di quantità viene impostato a 0 per i singoli elementi nella lista, non è per nulla efficiente ciclare "alla cieca" l'array per cercare gli elementi con quantità = 0.

Infatti è propio quello che cercavo di fare : appena la quantita di un oggetto è = a 0 allora rimuovi quell' oggetto.

Ora provo il tuo metodo e vedo un po...

- - - Updated - - -

Grazie mille funziona. Evidentemente avevo fatto un casino con quegli array.

Comunque una volta eseguita l' operazione delete Lista; è meglio inserire Lista = NULL; in modo che l' output sia formato solo da elementi esistenti nel magazzino.

for(int PosAttuale = 1; PosAttuale < GrandezzaMagazzino; PosAttuale++)
{
if(!(Lista[PosAttuale] == NULL))
{
cout << PosAttuale << ") " << Lista[PosAttuale]->NomeOggetto
<< Lista[PosAttuale]->Quantita << endl;
}
}

Grazie ancora ! :)
 
Pubblicità
Pubblicità
Indietro
Top