C++, einige array fragen
-
microwAve schrieb:
ich würde auf klassen spekulieren

struct's würden auch noch gehen
Und Boost würde ich da erstmal rauslassen, würde evtl etwas zu kompliziert...möp, hinweizz ist doof :p
-
ich denke das du mit klassen, vererbung und virtuellen Funktionen am besten dran bist. weiss aber nicht genau was dabei rauskommen soll.
basta
(mehr sag ich nicht)
-
Das hat weder was mit Vererbung noch virtuellen Funktionen zu tun.
@fabiopigi: Du könntest es so bauen: Du hast eine Klasse (oder struct) Element, die all deine Daten pro Element speichert (Name, oz etc) und eine Container-Klasse Elemente, die Objekte vom Typ Element in einer Hashtabelle (string, Element) speichert. In Elemente überlädst du den Array-Indizierungsoperator:
Element Elemente::operator[](const std::string& name);
Dann schreibste dir noch eine addElement Methode und schon kannste einfach per
elemente["H"].name = "foo", deine Elemente bearbeiten.
-
ich muss ehrlich sagen, die antworten klingen gut, nur hab ich noch nicht so den durchblick (erst zwei wochen her seit dem hallo welt obligatorium). habs jetzt einfacher und für mich verständlicher gelöst.
einen array mit allen namen, einen array mit allen ordnungszahlen, usw.
ist wahrscheinlich nicht so schön, weil es nicht mehr verschachtelte arrays sind, sondern 5 einzelne arrays, aber funktionieren tutsdanke trotzdem für die vielen antworten (kaum ein forum gesehen wo einem so schnell geholfen wird
)
-
fabiopigi schrieb:
einen array mit allen namen, einen array mit allen ordnungszahlen, usw.
ist wahrscheinlich nicht so schön, weil es nicht mehr verschachtelte arrays sind, sondern 5 einzelne arrays, aber funktionieren tutsGut, Hauptsache es funktioniert erstmal
Wenn du es verbessern willst, kannst du einfach ein Array machen mit einem struct als Inhalt. Etwa so:struct Element { string name; int oz; //... };Ist auch recht simpel, du musst keine Operatoren überladen und nix. Wenn du ein Element hinzufügen willst, sähe das ungefähr so aus:
vector<Element> daten; Element e; // Elemente-Daten auslesen e.name = "bla"; e.oz = 12; daten.push_back( e ); // Und Zugriff mit cout << daten[0].name << " " << daten[0].oz << endl; // Bzw statt 0 einen entsprechenden Index verwenden, die Anzahl der Elemente erhältst du mit unsigned int anzahl = daten.size(); // oder size_t anzahl = daten.size(); // size_t ist auch ein ZahlentypBtw, was für Arrays verwendest du? Statische wie
int oz[100]odervector<int>?
-
Ist natürlich schlecht, dass dir hier keiner ein bisschen Code gibt.
Also gesagt wurde sowas:typedef struct { std::string name; int oz; float /*oder double*/ gewicht; float smp; } element; ... element pse[109]; //Speichert Elemente Anhand der OZ pse[1].name = "Wasserstoff"; pse[1].oz = 1; pse[1].gewicht = 1.00794; pse[1].smp = 14.01; ...Falls du jetzt anhand des Zeichens auf das Element zugreifen möchtest, bietet C++ den Map-Container an:
... std::map<string, element> pse; element h; h.name = "Wasserstoff"; h.oz = 1; h.gewicht = 1.00794; h.smp = 14.01; pse["H"] = h; //So kannst du auch wieder lesen std::cout << pse["H"].name << pse["H"].oz << pse["H"].gewicht << pse["H"].smp << std::endl;Grüße
Martin
-
sieht noch verständlich aus der snipplet.
falls ich nach der analysis übung noch zeit hab, versuch ich das programm noch umzuschreiben.
die arrays die ich benutze sind "fixe", also int oz[10]
in unserem vorlesungsmaterial ist noch nix von vektoren aufgetaucht, aber wie's aussieht sind die etwas flexibler als arays.was ist den der unterschied zwischen arrays und vectoren? resp was die vor und nachteile von denen?
-
fabiopigi schrieb:
was ist den der unterschied zwischen arrays und vectoren? resp was die vor und nachteile von denen?
Naja, Arrays sind Größen-unveränderbar
Vectoren sind Klassen, die den Speicher innendrin verwalten, zur Übersicht kannst du dir ja mal http://cppreference.com/cppvector/index.html angucken.
-
Schau mal hier rein.
-
schauen vielversprechend aus, die vektoren, vorallem da auch eine gewisse ähnlichkeit zu php besteht.
kann/darf man auch einen mehrdimenionalen vektor machen?
-
vector< vector< vector< vector<int> > > >

-
Hier nochmals etwas einfacher zusammengefasst. Ich denke der Code sollte selbsterklärend sein.
#include <string> #include <map> using namespace std; struct Element{ string name; int oz; float gewicht; float smp; }; int main(){ map<string, Element> elemente; elemente["H"].name = "Wasserstoff"; elemente["H"].oz = 1; elemente["H"].gewicht = 1.00794; elemente["H"].smp = 14.01; elemente["Na"].name = "Natrium"; elemente["Na"].oz = 11; elemente["Na"].gewicht = 22.989768; elemente["Na"].smp = 370.95; }
-
@JimmydaMage: Warum C-Style?
@Tanren: struct und class sind identisch, wenn man außer acht lässt, dass default-access bei Klassen auf private steht und bei Strukturen auf public.
=>struct element { std::string name; unsigned int on; // gibt übrigens nur positive Ordnungszahlen ^^ double weight; double mp; double bp; element(std::string const& name, unsigned int ordinal_number, double weigth, double melting_point, double boiling_point) : name(name), on(ordinal_number), weight(weight), mp(melting_point), bp(boiling_point) {} }; int main() { std::map<std::string, element> map_elements; map_elements.insert(std::make_pair("H", element("Wasserstoff", 1, 1.00794, 14.01, 100.0))); map_elements.insert(std::make_pair("Na", element("Natrium", 11, 22.989768, 370.95, 120.0))); }... dann kannst du dir auch noch schön den operator<< überladen um eine anständige Ausgabe hinzubekommen
