bitte helfen Sie mir diesen Fall zu verstehen, mit:
ich zu einem vector
von struct
in einem Projekt zum Speichern von Daten arbeitete, mein Ziel ist es, sich am Leben zu halten, bis Ich rufe eine Funktion auf, um mit den Daten zu arbeiten, und lösche sie dann in der Warteschlange. Aber mein Problem ist, ich weiß nicht, wie man das Element in Vektor sicher löscht, wenn ich den struct
unter Verwendung new
Operators zuteile.
Beispiel:
ein Element im Vektor löscht, die allocted wird ‚neuen‘ Betreiber
//definition of truct
struct MData {
int dHeight;
int dWidth;
};
//definition of queue
std::vector< MData* > dataQueue;
Dies ist, wie ich speichern Daten in der Warteschlange:
//when got the data
MData* mData = new MData;
mData->dHeight = sourceHeight;
mData->dWidth = sourceWidth;
//Then put it in the queue
dataQueue.push_back(MData);
Nach der Berechnung, möchte ich das erste Element in der Warteschlange
So löschen Welche Methode sollte ich verwenden: delete dataQueue.front()
? um die Erinnerung zu befreien. Oder mit dataQueue.erase(dataQueue.front())
?
Vielen Dank im Voraus.
Ich denke, Sie haben einen Typfehler - Ihr std :: vector hat MDatas (die tatsächliche Struktur), aber Sie versuchen, einen Zeiger auf MData zu schieben. Das wird nicht funktionieren. Um eine Struktur zu bereinigen, die von new zugewiesen wurde, versuchen Sie, sie zuerst von der Liste zu entfernen und dann den Zeiger zu löschen. (Sie müssen es nicht in zwei Schritten tun, aber es macht es einfacher zu sehen, was vor sich geht.) –
dataQueue.push_back (MData); 'wird nicht kompiliert, weil' MData' eine Struktur und kein Objekt ist. 'mData-> dWidth = sourceWidth' wird nicht kompiliert, weil Sie das Semikolon vergessen haben. So bin ich 100% sicher, dass das ** nicht ** wie Sie Daten in der Warteschlange speichern. – immibis
Sorry, Jungs, ich habe zu diesem Zeitpunkt noch keinen Compiler, den ich gerade schreibe, ich schreibe einfach den obigen Code. Ich habe diese Fehler bearbeitet. –