dynamisches array

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

dynamisches array

Beitrag von mollitz »

hallo,

ich hab eine frage zu c++/standardprogrammierung. und zwar will ich in eine anwendung eine tabelle reinmachen mit den variablen maßen zwischen 5x5 und 9x9. da ist alles erlaubt dazwischen.
jetzt will ich jedes feld mit einem int wert "füllen". also brauche ich ein array. jedoch können arrays nicht dynamisch erstellt werden. die werte müssen bei der kompilierung schon klar sein. wie kann ich das jetzt lösen?
wie ich die tabelle "graphisch" erstelle weiss ich schon.

danke, moritz
Andy
Beiträge: 16
Registriert: 16. Juni 2007 00:39

Beitrag von Andy »

Wenn die Größe zur Compilezeit schon klar sind, kannst du die Array-Größe über ein
define festlegen:

#define ARRAY_SIZE 5
...
int array[ARRAY_SIZE];


oder alternativ, mit echter dynamischer Größe, kannst du dir mal vector aus der STL anschauen. (http://www.cplusplus.com/reference/stl/)
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

das sind grundlagen!

vergiss das obere beispiel; beschäftige dich mal mit new und delete! wenn du sowas wie dynamische arrays erstellen willst.

int *var = new int[dim];
damit kannst du speicher allokieren (dim*int) und mit delete [] var löscht dus wieder.
ansonsten wären verkettete listen und {oder} dieQList <Template> ne möglichkeit, diese ist wohl selber eine verk. liste.
Sephral
Beiträge: 201
Registriert: 1. Februar 2006 09:40
Kontaktdaten:

Beitrag von Sephral »

Hallo,

die Lösung hängt schwer davon ab, was du am Ende mit den Daten anstellen willst und welche/wieviele Daten du pro Element speichern willst.

Wenn du eine Anzeige in Tabellenform (oder als Tree) planst, wäre es vielleicht am einfachsten, wenn du Deine Datenbasis direkt als Model schreibst (QAbstractItemModel). Dann könntest du mit einem Aufwasch auch gleich Icons, Tooltips, Schriftare/Farbe und ggf. Auswertungen der Daten unterbringen (z.B. Schriftfarbe, abhängig vom Wert des Feldes). Das Model könntest du dann auch gleich mit Delegates editieren über die GUI...

Wenn es einfach nur um Strings geht, die nicht in einem View angezeigt werden sollen, kann auch schon soetwas helfen (Vorsicht beim Zugriff *g*):

Code: Alles auswählen

QHash<QString, QStringList>>
Du kannst auch soetwas verwegenes machen :-) :

Code: Alles auswählen

QHash<QString, int> list;

// Füllen der Liste

// Koordinaten für Zugriff
QString x = "1";
QString y = "2";

int myValue = list.value(x+y);
Möglichkeiten gibts genug, du musst entscheiden was für Dich das Beste ist.


Ciao,
Sephral
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

Beitrag von mollitz »

slash-ex hat geschrieben:das sind grundlagen!

vergiss das obere beispiel; beschäftige dich mal mit new und delete! wenn du sowas wie dynamische arrays erstellen willst.

int *var = new int[dim];
damit kannst du speicher allokieren (dim*int) und mit delete [] var löscht dus wieder.
ansonsten wären verkettete listen und {oder} dieQList <Template> ne möglichkeit, diese ist wohl selber eine verk. liste.
und dim muss nich zur kompilierung schon klar sein ?
das wär gut, danke!
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

nein, es ist möglich mit new den speicher zu allokieren, wenn er während der betriebszeit benötigt wird.
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

Beitrag von mollitz »

jaja das mit new hab ich eigetnlich schon begriffen.

jetzt ist da noch das problem, dass das array 2-dimensional is, weils ja ne tabelle gibt.
jetzt hab ich das so in der headerdatei gemacht: (von ner klasse)
int **feldwert;
und so in der cpp-datei
feldwert = new int[lay_x][lay_y];
da kommt aber der fehler
src\mainwindowimpl.cpp:41: error: `MainWindowImpl::lay_y' cannot appear in a constant-expression

wie gehts richtig?
danke, moritz
Antworten