Zum Inhalt springen

Mehrdimensionales, dynamisches Array


TinTin

Empfohlene Beiträge

Servus,

ich bin auf der suche nach der lösung nach folgender Aufgabenstellung,

warscheinlich liegt es am Freitag und ich steh auf den Schlauch. Ich bitte um Nachsicht.

gesucht wird ein mehrdimensionales, dynamisches Array in dem ich CStrings

ablegen kann.

index [0] : CString1,CString2,CString3,CString4,CString5,CString6

index [1] : CString1,CString2,CString3,CString4,CString5,CString6

index [3] : CString1,CString2,CString3,CString4,CString5,CString6

...

index [N] : CString1,CString2,CString3,CString4,CString5,CString6

Die Anzahl der Spalten steht fest, die Zeilen müssen dynamisch sein.

Wie würdet Ihr das realisieren?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es gibt mehrere Möglichkeiten.

Eine wäre es eine struct, die die Einträge für jeweils eine Zeile aufnimmt, anzulegen, die benötigte Anzahl an structs dann z.B. mit einen std::vector zu verwalten.

so in der Art habe ich das auch schon probiert, struct mit sechs CStrings und das ganze mit einem CArray verwaltet. mich stört nur, dass ich dann die daten

nur mit Namen ( struct.string1 usw. ) ansprechen kann. mir wäre dass mit einem Index lieber. In der Art ArrayZeile[X].Spalte[Y].

Wie sind denn die anderen Möglichkeiten?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstell dir ein Containerobjekt, das besitzt first und last zeiger auf die jeweiligen Zeilen. Jede Zeile wäre ein Objekt mit 6 CStrings und hätte einen next, prev Zeiger.

Container:

Zeile0

Zeile1

Zeile2

Zeile0:

CString0, CString1, CString2, CString3, CString4, CString5

Zeile1:

CString0, CString1, CString2, CString3, CString4, CString5

Zeile2:

CString0, CString1, CString2, CString3, CString4, CString5

Dann überschreibst du entsprechend den index Operator. Dann wäre es wohl kein Problem etwas zuschreiben wie:

Container[0][0] um auf die 1 Zelle der 1 Zeile zuzugreifen.

Durch die Verkettung bleibt alles dynamisch.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit dem Array-Operator klappt doch:

Mann muß nur beachten, daß beim Anlegen einer neuen Zeile die Größe des Inhalts wieder auf 6 gesetzt wird.

	CArray<CArray<CString>> CB;
CB.SetSize(6);
for(int x = 0; x < CB.GetCount(); x++) CB[x].SetSize(6);
CB[0][0] = "test1";
CB[1][0] = "test2";
CB[0][1] = "test3";
CString tmp0;
tmp0 = CB[0][0]; // test1
tmp0 = CB[1][0]; // test3
tmp0 = CB[2][0]; // test2
tmp0 = CB[6][0]; // Absturz!
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

mich stört nur, dass ich dann die daten

nur mit Namen ( struct.string1 usw. ) ansprechen kann. mir wäre dass mit einem Index lieber. In der Art ArrayZeile[X].Spalte[Y].

Das geht auch. Beispiel:


#include <string>

#include <vector>


struct Datensatz

{

	std::string Spalte[6];

};


void Test()

{

	std::vector<Datensatz> Zeilen(2);

	Datensatz d;

	d.Spalte[0]="abcdef";

	d.Spalte[1]="123456";

	Zeilen[0] = d;

	d.Spalte[0]="abc";

	d.Spalte[1]="123";

	Zeilen[1] = d;

	std::cout << Zeilen[0].Spalte[1] << std::endl;

	std::cout << Zeilen[1].Spalte[1] << std::endl;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn man der Struktur einen operator[] verpasst, kann man auch die Schreibweise für mehrdimensionale Array nutzen:

struct Datensatz
{
CString Spalte[6];
CString& operator[](size_t index) { return Spalte[index]; };
CString const& operator[](size_t index) const { return Spalte[index]; };
};

void Test()
{
std::vector<Datensatz> Zeilen(2);
Datensatz d;
d[0]="abcdef";
d[1]="123456";
Zeilen[0] = d;
d[0]="abc";
d[1]="123";
Zeilen[1] = d;
std::cout << Zeilen[0][1] << std::endl;
std::cout << Zeilen[1][1] << std::endl;
}[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...


	std::vector<Datensatz> Zeilen(2);

	Datensatz d;

	d[0]="abcdef";

	d[1]="123456";

	Zeilen[0] = d;

	d[0]="abc";

	d[1]="123";

	Zeilen[1] = d;

	std::cout << Zeilen[0][1] << std::endl;

	std::cout << Zeilen[1][1] << std::endl;

}

Ich habe es im Prinzip so übernommen, nur verwende ich keinen std::vector

sonder CArray.

danke für Eure Hilfe und Anregungen und ich bin der Meinung, dass unser

Klotzkopp immer noch eins mehr weiss als der Teufel.:uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...