Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wert aus Array löschen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.09.2004, 16:24 Uhr
Sapphira



Hallo,

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).

Danke
Sapphira
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.09.2004, 16:53 Uhr
ao

(Operator)



Zitat von Sapphira:
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.09.2004, 23:21 Uhr
(un)wissender
Niveauwart


Nimm dann lieber eine Liste mit structs, ist viel einfacher.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.09.2004, 11:34 Uhr
Sapphira




Zitat von (un)wissender:
Nimm dann lieber eine Liste mit structs, ist viel einfacher.

Liste ... schon einmal gehört ... aber wie funktioniert so was?

Kennst du ne gute Seite wo das erklärt wird?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.09.2004, 11:58 Uhr
Sapphira



//Ich habe jetzt ein Struct erstellt:

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;

Devices->nCameraNo = nCameraNo;
Devices->nThreadID = nThreadID;

if(m_pEnd)
m_pEnd->lNextEntry = Devices;
if(!m_pBegin)
m_pBegin->lNextEntry = Devices;

m_pEnd = Devices;
m_lNumberElements++;
}
else
{
/*Delete Entry*/
}
}

kann mir jemand erklären, was die einzelnen Zeilen machen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.09.2004, 12:25 Uhr
ao

(Operator)


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.09.2004, 12:36 Uhr
Sapphira




Zitat von ao:
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?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.09.2004, 14:05 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.09.2004, 14:18 Uhr
0xdeadbeef
Gott
(Operator)


Das wär ne Idee:

C++:
#include <list>

struct fw_device {
  unsigned int thread_id,
               camera_no;
};

//...

std::list<fw_device> my_list;
fw_device my_device;

my_device.thread_id = 42;
my_device.camera_no = 23;

my_list.push_back(my_device);

//...

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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: