mehrdimensionale arrays mit unterschiedlichen Datentypen
-
gut, das funktioniert schonmal, thx (stand dann wohl in dem beitrag den ich gelesen habe falsch^^).
aber wie fügt man jetzt ein neues Wertepaar mit .push_back() ein? die Funktion akzeptiert ja nur ein argument...
-
Mach das doch einfach eine Struktur für Elemente mit unterschiedlichen Datentypen. Mit dieser Struktur bildest du dann deine arrays. So ist das allgemein üblich und bewährt. :p
-
andi01 schrieb:
aber wie fügt man jetzt ein neues Wertepaar mit .push_back() ein? die Funktion akzeptiert ja nur ein argument...
Du erzeugst per ctor einfach eine neue Instanz. std::make_pair wäre auch ein Alternative.
std::vector<std::pair<int, char>> vec; vec.push_back(std::pair<int, char>::pair(10, 0));(ungetestet!)
berniebutt schrieb:
Mach das doch einfach eine Struktur für Elemente mit unterschiedlichen Datentypen. Mit dieser Struktur bildest du dann deine arrays. So ist das allgemein üblich und bewährt.
Nö, ist nicht üblich. Für sowas wurde std::map in den Standard aufgenommen.
-
http://www.cplusplus.com/reference/std/utility/pair/
http://www.cplusplus.com/reference/std/utility/make_pair/
-
Kóyaánasqatsi schrieb:
vec.push_back(std::pair<int, char>::pair(10, 0));Das sollte wahrscheinlich
std::pair<int, char>(10, 0)heissen. Auch wenn ich eherstd::make_pair(10, '\0')verwenden würde.
Kóyaánasqatsi schrieb:
Nö, ist nicht üblich. Für sowas wurde std::map in den Standard aufgenommen.
std::mapwird für Assoziationen zwischen Schlüssel und Wert benötigt. Um einfach zwei Typen zusammenzufassen, iststd::pairoder eine eigene Klasse sinnvoller.
-
ok thx habe es jetzt so gelöst:
std::vector<std::pair<int, char>> vec; vec.push_back(std::pair<int, char>(10, 'a')); cout<<vec[0].first<<" "<<vec[0].second;der grund warum ich gerne standardtypen verwenden würde ist dass ich eine funktion mit 2d-vektoren in eine dll packen will, wenn ich jetzt also mit struct eine neue struktur in der dll mache kennt sie das ausführende programm ja nicht...
danke an alle,
der code oben funktioniert
-
Mit deinem Wissenstand würd ich lieber erst einmal eine solide Grundlage in der Sprache schaffen, bevor ich mit dlls anfangen würde. Mir erscheint es so alls würdest du noch nicht lange Programmieren und hast recht wenige Erfahrungen und hast dlls noch nicht richtig verstanden.
andi01 schrieb:
wenn ich jetzt also mit struct eine neue struktur in der dll mache kennt sie das ausführende programm ja nicht...
Dein Programm wird weiter die Headerdatein brauchen, damit wird es den Datentyp kennen lernen
nur das "Linken" wird auf die Laufzeitebene ausgelagert
-
andi01 schrieb:
der grund warum ich gerne standardtypen verwenden würde ist dass ich eine funktion mit 2d-vektoren in eine dll packen will, wenn ich jetzt also mit struct eine neue struktur in der dll mache kennt sie das ausführende programm ja nicht...
Auch damit wäre ich vorsichtig an deiner Stelle. Wenn du z.B. verschiedene Runtime versionen verwendest dann kann es sein das die typen nicht kompatibel sind. (kann der Fall sein wenn man z.B. die DLL mit VC2005 kompiliert und die Anwendung irgendwann später mit VC2008 (sogar verschiedene service packs der runtimes können im schlimmsten fall ein problem bedeuten))
Also verlass dich da nicht all zu sehr drauf so lange du nicht garantieren kannst das die Versionen passen.
-
evilissimo schrieb:
Also verlass dich da nicht all zu sehr drauf so lange du nicht garantieren kannst das die Versionen passen.
einzige sichere Methode müsste extern "C" sein
-
Nexus schrieb:
Kóyaánasqatsi schrieb:
vec.push_back(std::pair<int, char>::pair(10, 0));Das sollte wahrscheinlich
std::pair<int, char>(10, 0)heissen.Eigentlich nicht, ich schreibe gerne den ctor dahinter um einen besseren Überblick zu haben
