Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Dynamisches Array anlegen?

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
13.09.2003, 00:30 Uhr
~Gh05t
Gast


Hallo,
ich will ein array dynamisch erstellen indem ich es in einer schleife entsprechend der durchläufe immer um ein feld erweitern und die wärend des schleifendurchlaufs ermittelten werte darin speichern will.
Also ungefähr so:

Code:
while( ... daten noch nicht fertig ausgelesen sind ...)
{
... ermittele daten ...;
array + 1 Feld;
array[neues Feld] = ermittelte Daten;
}



Naja, es ist halt vorher nicht absehbar wie oft die schleife durchläuft... deshalb würde ich das am liebsten so lösen, hab nur keine Ahnung wie
thx

~Gh05t~
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.09.2003, 04:11 Uhr
~Philipp
Gast


Was du brauchst, sind verkettete Listen...

Die Funktionieren etwas anders als Arrays, aber mit ein bisschen arbeit kannst du mit denen auch genau wie mit arrays arbeiten! Du kannst an diese Listen halt immer ein zusätzliches Datenelement dranhängen, die Liste kann also auch sehr groß werden, kann aber auch sehr klein bleiben, ist eben dynamisch

Wenn du eine vorgefertigte verkettete liste suchst, schau mal in der MSDN nach "list" bzw. "vector" für einen vorgefertigten Vektor.

Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.09.2003, 04:13 Uhr
~Philipp
Gast


Achso, als Code würde das dann in etwa so aussehen:


Code:
Datenelement DElement;
DElement=???
VList.AddNode(DElement);



Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.09.2003, 14:32 Uhr
Spacelord
Hoffnungsloser Fall


@Philipp:
Viele API-Funktionen erwarten aber nunmal einen Zeiger auf ein Array,eines bestimmten Datentyps,und nicht den Kopf einer Liste!
Diese Funktionen tragen bei ihrer Rückkehr die Anzahl der wirklich eingetragenen Daten in eine übergebene Grössenvariabel ein.Ist diese Zahl gleich der Arraygroesse ist das Array wahrscheinlich zu klein gewesen und man sollte den Aufruf mit einem grösseren Array wiederholen.
Zum Beispiel NtQuerySystemInformation oder EnumProcesses.
In beiden Fällen wird Speicherplatz gebraucht,dessen Grösse man beim ersten Aufruf nur erraten kann oder halt übermässig gross auslegt.

@Gh05t:
Schau dir mal HeapAlloc und HeapFree an.Im Gegensatz zu new erwartet HeapAlloc keine konstante Grösse als Parameter.


MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.09.2003, 14:38 Uhr
0xdeadbeef
Gott
(Operator)


Ich würd wahrscheinlich einfach die STL-Map benutzen. Wenn du zum Beispiel strings ausliest:

C++:
#include <string>
#include <map>

using namespace std;

//...
map<int, string> daten_map;

//...

while(/*... daten noch nicht ausgelesen ...*/) {
  string daten;
  int index;
  //...daten einlesen in string daten, index hochzählen
  daten_map[index] = daten;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.09.2003, 18:25 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Seit wann erwartet new eine konstante Größe?!?

solche sachen wie


C++:
int x = 10;
char *c = new char[x];



gehen doch
--
class God : public ChuckNorris { };

Dieser Post wurde am 13.09.2003 um 18:26 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.09.2003, 09:55 Uhr
RHBaum




Zitat:

ich will ein array dynamisch erstellen indem ich es in einer schleife entsprechend der durchläufe immer um ein feld erweitern und die wärend des schleifendurchlaufs ermittelten werte darin speichern will.


geht prinzipiell nicht ... feld erweitern = feld neu anlegen mit groesse + x, aus alten feld kopieren, altes feld loeschen ...
ziemlich ineffizient ...

Listen, vectoren sind da besser geeignet ....

Zitat:

Viele API-Funktionen erwarten aber nunmal einen Zeiger auf ein Array


... aber auf Grund ihrer optimierten implementation nimmer kompatibel zu nem array .
Das einzige was Dir hintereinanderliegenden Speicherbereich garantiert, sind String-Implementationen.

DU hast also 3 moeglichkeiten ...

1. du vergewaltigst ne String klasse mit deinem Struct -Typ, den fuer die API brauchst ... std::basic_string<MyStruct> ... eher unschoen !
2. du implementierst dir nen Wrapper um nen Array ... nicht grad performant !
3. Du nimmst ne Liste/Vector zum editieren ... und bei API-Call konvertierst den Inhalt der Liste in nen Array ... die beste und auch gelaufigste Loesung !

Ciao ...

Dieser Post wurde am 16.09.2003 um 09:55 Uhr von RHBaum editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


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: