Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » anfängerfrage: array unbekannter länge...

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
21.06.2003, 10:52 Uhr
~RML
Gast


hi,
ich habe mal eine basicfrage.
ich muss ein array erstellen, welches per buttonclick vergrössern kann. bzw. den letzten array datensatz löschen kann. es soll immer nur hinten angehngt und gelöscht werden.

ich am schon auf die idee, kein array zu nehmen und in meinem struct eine zusätzliche variable zu nehmen die einen zeiger enthält, der auf das nächste struct zeigt. das wäre aber nicht optimal, da ich normalerweise das struct in einem array haben wollte.


die anzahl der struct (datensätze) ist nicht bekannt.

hat jemand einen ansatz für mich ? ich wäre dankbar für jeden guten tip!


aus berlin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.06.2003, 12:09 Uhr
~0xdeadbeef
Gast


In C per realloc, in C++ würd ich die STL-Template-Klasse vector nehmen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.06.2003, 13:10 Uhr
bIOHAZARd



Wenns MFC sein darf hilft vielleicht CArray / CObArray
Dieser Post wurde am 22.06.2003 um 13:10 Uhr von bIOHAZARd editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.06.2003, 13:49 Uhr
virtual
Sexiest Bit alive
(Operator)


Meide die MFC, wenn Du die STL verwenden kannst.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.06.2003, 10:34 Uhr
~RML
Gast


hi,
danke für die tips! ich habe etwas rumprobiert und habe mir realloc mal angeschaut.
leider komme ich da auch nicht weiter.

hier mal eine genauere problembeschreibung:

ich habe ein struct

typedef struct stairstr
{
int Type;
Real Height;
Real Length;
Real Width;
int StepCount;
} STAIR;

Das ganze soll als Array angelegt werden.

STAIR [10];

Nun will ich, das aus Knopfdruck ein Array mit 11 (mal des struct wird) wird ohne die darin enthalten bisherigen 10 Daten zu löschen.

D.h. es soll dynamisch wachsen. Lt. der Hilfefunktion muss man bei realloc die Bytezahl als neue Größe angeben.

Ich komme also nicht wirklich weiter. ist der einzige weg wirklich über verkettete listen ? Die sind aber in der Handhabung recht unpraktisch.

ich sitze hier nun mit einem riesen fragezeichen im gesicht.

gruß
rml

p.s. ich nutze vs c++ net 2002.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.06.2003, 10:50 Uhr
ao

(Operator)


Zuerst mal: In welcher Sprache soll das gemacht werden, C oder C++? Und falls es C++ ist: Darfst du Template-Klassen aus der STL verwenden (vector) oder aus einer anderen Klassenbibliothek (z.B. MFC)?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.06.2003, 12:18 Uhr
~Gast
Gast


hm gute frage, da es sich um ein plugin für ein anderes Programm handelt und die fenster und oberflächen über die Befehle der eigenen API erstellt werden. ich denke, dass stl und mfc gehen wird. man sollte aber beachten, dass eine spätere compilierung auf dem mac ggf. auch möglich sein sollte.

die sprache ist c++.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.06.2003, 13:42 Uhr
ao

(Operator)



Zitat:
~Gast postete
man sollte aber beachten, dass eine spätere compilierung auf dem mac ggf. auch möglich sein sollte.


Dann ist MFC wahrscheinlich gestorben, die gibts nämlich (meines Wissens) nur für Microsoft-Compiler (oder gibts Visual C++ für Mac?)

Aber wenn du in C++ programmierst, solltest du dich nicht mit realloc rumschlagen, das ist für die "armen C-Säue".

Schau dir mal die STL-Templates vector oder list an und nimm das, was am besten zu deinem Problem paßt. Du hast schon geschrieben, daß du nur am Ende anfügen und löschen willst. Aber wie liest du die Datensätze aus? Sequentiell (würde für list sprechen) oder indiziert (dann eher vector)?

ao

Dieser Post wurde am 23.06.2003 um 13:42 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.06.2003, 16:53 Uhr
~RML
Gast


OK, ich werde mir die STL Sache mal anschauen.
auslesen reicht mir vorwärts und (am besten auch) rückwärts.

beim abarbeiten der Datensätze werden immer alle vom ersten bis zum letzten durchgearbeitet und zwar ausschlieslich in der richtung. zum editieren der einzelnen elemente muss ich natürlich vorwärts oder rückwärts springen können.

also denke ich, dass deiner beschreibung nach die list variante geeigneter sein wird.

ich gebe bescheid, wenn ich damit klargekommen bin und es mir geholfen hat.

danke schonmal im voraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.06.2003, 17:51 Uhr
ao

(Operator)



Zitat:
~Gast postete
dass eine spätere compilierung auf dem mac ggf. auch möglich sein sollte.


Hierzu noch ne Anmerkung: Ggf. gibts bei so was nicht. Eine Software ist entweder portabel entworfen oder nicht. Ein portabler Entwurf kostet in der Regel mehr Zeit, weil er auf allen Zielsystemen verifiziert werden muß. Man muß sich um einige Dinge Gedanken machen, die bei einem nichtportablen Entwurf kein Thema sind.

Das fängt an bei so "Kleinigkeiten" wie Byte-Order an (besonders dann, wenn PC und Mac im Spiel sind) und geht weiter damit, daß für alle Zielplattformen C++-Compiler, STL-Bibliotheken, Testsysteme usw. verfügbar sein müssen, und zwar vom ersten Tag an.

Dann muß verifiziert werden, daß das Rahmenprogramm, für das du das Plugin schreibst, auf beiden Systemen dasselbe Plugin-API hat bzw. die Unterschiede müssen in einer geeigneten Zwischenschicht aufgefangen werden.

Außerdem muß geklärt werden, ob es Dinge in dem Plugin geben wird, die nur systemabhängig programmiert werden können, weil es keine STL-Verpackung dafür gibt (als spontanes Beispiel fallen mir Threads ein - gibts doch nicht in der STL, oder?). In diesem Fall muß man sich auch hierfür eine portable Verpackung einfallen lassen.

Und es muß eine Lösung dafür gefunden werden, wie man von beiden Entwicklungsplattformen aus auf die gleiche Sourcecode-Basis zugreift (z.B. mit cvs).

Ich habe bestimmt noch ein paar Sachen vergessen.

Das sind alles keine unlösbaren Probleme, aber sie kosten Zeit. Sie kosten schon viel Zeit, wenn man sie von Anfang an einplant, aber sie kosten erst richtig viel, wenn man irgendwann merkt, daß man sie nachträglich einbauen muß. Und das frustrierende Ende vom Lied ist dann meist, daß man, unter dem Druck, fertig zu werden, zwei nichtportable Programme ausliefert, die außer dem Namen nichts gemeinsam haben, und fortan doppelten Pflegeaufwand hat.

Also, portabel oder nicht ist eine Entscheidung, die am Anfang eines Projekts fallen muß. Erst mal auf PC programmieren, und dann irgendwann später gegebenenfalls auf den Mac wechseln, das wird nicht gutgehen.

Viel Erfolg

ao
 
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: