Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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.

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?

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.

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]

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;

}

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]

Das sieht ja vielversprechend aus, werde mir das Ganze mal in Ruhe anschauen

und mich dann melden wie ich es gemacht habe. Danke an alle für die Mühe.

TinTin

  • 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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.