ich habe ein Array erstellt, in dem alle mit FireWire angeschlossenen Geräte aufgeführt werden. Wenn ein neues Gerät erkannt wird, wird es Ende des Arrays hinzugefügt. Wird nun ein Gerät entfernt, soll dieses Gerät aus dem Array gelöscht werden. Es sollen aber keine leeren Einträge in dem Array stehen. Wie kann ich das machen? Ich habe ein 2DArray (Name, ID).
Wie kann ich das machen? Ich habe ein 2DArray (Name, ID).
Indem du alle nachfolgenden Einträge um eine Stelle nach vorne rückst, also den (i+1)-ten Eintrag auf den i-ten Eintrag kopieren, beginnend bei dem Eintrag hinter dem gelöschten und aufhörend beim letzten.
Wie das genau geht, ist von den gewählten Datenstrukturen abhängig. Am besten verrätst du mal, wie die Geräte-Struktur definiert ist und wie das Array definiert ist.
typedef struct LISTE { LISTE* lNextEntry; unsigned int nThreadID; unsigned int nCameraNo; };
LISTE* Devices = new LISTE;
LISTE* m_pBegin; // Erstes Element in der Liste LISTE* m_pEnd; // Letztes Element in der Liste long m_lNumberElements; // Anzahl Elemente
void Devices(unsigned int nDeviceNo, unsigned int nDeviceID, bool Add) { if(Add) { //folgendes habe ich von jemandem übernommen, verstehe es aber nicht ganz Devices->lNextEntry = 0x00;
Anderer Vorschlag. Erklär uns doch erst mal ein paar Dinge.
Wird das ein C- oder ein C++-Programm?
Falls es C++ wird: In C++ gibt es sehr leistungsfähige Klassenbibliotheken (sog. Containerklassen), die dir die ganze Datenhaltung abnehmen. Da brauchst du die Liste nicht selber zu programmieren, weil sie schon fertig ist. Und es gibt auch Array-Klassen, die (anders als gewöhnliche C-Arrays) dynamisch wachsen und schrumpfen können.
Es sei denn, das ist ne Hausaufgabe und die Implementierung des Containers ist der Zweck der Übung.
Anderer Vorschlag. Erklär uns doch erst mal ein paar Dinge.
Wird das ein C- oder ein C++-Programm?
Falls es C++ wird: In C++ gibt es sehr leistungsfähige Klassenbibliotheken (sog. Containerklassen), die dir die ganze Datenhaltung abnehmen. Da brauchst du die Liste nicht selber zu programmieren, weil sie schon fertig ist. Und es gibt auch Array-Klassen, die (anders als gewöhnliche C-Arrays) dynamisch wachsen und schrumpfen können.
Es sei denn, das ist ne Hausaufgabe und die Implementierung des Containers ist der Zweck der Übung.
Es wird ein C++-Programm. Es ist keine Hausaufgabe. Was für C++ Klassen gibt es denn?
Eine recht einfache (wenn auch nicht so schöne) Methode wäre wenn du dir einfach ein zweites Array mit einem Element weniger anlegst und dann in einer Schleife alle Elemente, bis auf das was gelöscht werden soll, in das neue Array kopierst und dann das alte löschst.
for(std::list<fw_device>::iterator i = my_list.begin(); i != my_list.end(); ++i) { if(i->camera_no == 23) my_list.erase(i); }
Allerdings gehe ich davon aus, dass es wahrscheinlich klüger wäre, nen Schlüssel festzulegen und std::map zu benutzen. Dafür bräuchte man aber ein eindeutiges Identifizierungsmerkmal für die Geräte. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra