Verständnisfrage zu Klasse bzw. STL-Algorithmen
-
Wir haben folgende Aufgabe zu erledigen:
Schreiben Sie ein C++ Programm, das zunächst
mit Hilfe des Zufallszahlengenerators ganze Zahlen im Bereich zwischen 0 und 10 erzeugt und
daraus Objekte der Klasse Element generiert und diese entsprechend der Erzeugungsreihenfolge
in einem std::vector ablegt. Die Klasse Element speichert neben dem eingelesenen Wert auch
die Erzeugungsreihenfolge (Index).
Kopieren Sie den Vektor in einen weiteren Vektor und sortieren Sie die Elemente beider Container
nach demWert aufsteigend! Verwenden Sie für den ersten Vektor den Algorithmus std::sort und
für den zweiten Vektor den Algorithmus std::stable_sort!Ausgabe könnte so aussehen:
unsorted values:
6-0 10-1 9-2 0-3 7-4 10-5 7-6 7-7 1-8 5-9 5-10 7-11 6-12 7-13 0-14
8-15 8-16 9-1 7 1-18 9-19 9-20 9-21 0-22 10-23 7-24 8-25 6-26 2-27
7-28 7-29 6-30 1-31 8-32 2-33 4-34 4-35 1-36 6-37 1-38 8-39Allerdings verstehe ich die Frage nicht ganz. muss ich z.b bei 40 generierten Zufallszahlen, 40 Elementobjekte dynamisch generieren? so wie ich das verstehe hab ich in der klasse nur die membervariablen wo die generierte zahl gespeichert ist und wo der index gespeichert wird. denn der vektor liegt ja außerhalb der klasse. wieso wird hier eine klasse benutzt und nicht eine struct?
ich "visualisiere" mal was ich verstanden hab:
class Element { int numgen; int index; } typedef vect<Element> Elementvektor;z.b. im main (ich behandle jetzt die sonderfälle nicht, es geht mir jetzt wirklich nur um die idee dahinter)
int main() { int anzahl=40; string objektname; Elementvektor evektor for (int i=0; i<anzahl;i++) { cin>>objektname; Element *objektname=new Element; objektname->index=i; objektname->numgen=//ist jetzt nicht wichtig :) evektor.push_back(objektname); } }passt der grundgedanke oder liege ich komplett falsch?
p.s: bin neu hier und freu mich hier zu sein

hochachtungsvoll
ACnut
-
ACnut schrieb:
class Element { int numgen; int index; } typedef vect<Element> Elementvektor;z.b. im main (ich behandle jetzt die sonderfälle nicht, es geht mir jetzt wirklich nur um die idee dahinter)
int main() { int anzahl=40; string objektname; Elementvektor evektor for (int i=0; i<anzahl;i++) { cin>>objektname; Element *objektname=new Element; objektname->index=i; objektname->numgen=//ist jetzt nicht wichtig :) evektor.push_back(objektname); } }passt der grundgedanke oder liege ich komplett falsch?
Passt.
Allerdings ist dasnewüberflüssig, bzw. falsch bei der gegebenen Deklaration vonElementvektor
-
danke für die sehr schnelle antwort
hmm wieso is das new unnötig, muss es ja zur laufzeit erzeugen die objekte.
was hat das mit dem evektor zu tun?eine frage noch:
beim freigeben der objekte muss ich warhsceinlich alle wieder durchgehen und einzeln freigeben oder?
-
ACnut schrieb:
hmm wieso is das new unnötig, muss es ja zur laufzeit erzeugen die objekte.
Jo, aber das kann es auch ohne new - mit einer ganz gewöhnlichen automatischen Variable, die auf dem Stack liegt.
(Es ist übrigens falsch, da du versuchst einen Zeiger an die
push_backFunktion zu übergeben, die allerdings eine const-Referenz auf den Elementtyp (Element) erwartet)
-
Tatsächlich dachte ich gelesen zu haben:
typedef std::vector<Element> Elementvektor;Die Aufgabe klingt ja auch so als ob das gemeint wäre.
Und dann speicherst Du Instanzen vonElementin dem Vektor, keine Zeiger darauf.d.h.
for (int i=0; i<anzahl;i++) { Element e; e.index = i; e.numgen = //ist jetzt nicht wichtig :) evektor.push_back(e); }Oder ähnlich.
-
Sone schrieb:
ACnut schrieb:
hmm wieso is das new unnötig, muss es ja zur laufzeit erzeugen die objekte.
Jo, aber das kann es auch ohne new - mit einer ganz gewöhnlichen automatischen Variable, die auf dem Stack liegt.
(Es ist übrigens falsch, da du versuchst einen Zeiger an die
push_backFunktion zu übergeben, die allerdings eine const-Referenz auf den Elementtyp (Element) erwartet)oh,ok

Furble Wurble schrieb:
Tatsächlich dachte ich gelesen zu haben:
typedef std::vector<Element> Elementvektor;Die Aufgabe klingt ja auch so als ob das gemeint wäre.
Und dann speicherst Du Instanzen vonElementin dem Vektor, keine Zeiger darauf.d.h.
for (int i=0; i<anzahl;i++) { Element e; e.index = i; e.numgen = //ist jetzt nicht wichtig :) evektor.push_back(e); }Oder ähnlich.
krankes beispiel

wobei ich immer noch nicht verstehe wieso man eine klasse benutzt und nicht einfach eine struct. oder ist die automatisch privat gestzten membervariablen durch die klasse so wichtig bei dem beispiel?(soll keine ironische frage sein
)
-
ACnut schrieb:
wobei ich immer noch nicht verstehe wieso man eine klasse benutzt und nicht einfach eine struct. oder ist die automatisch privat gestzten membervariablen durch die klasse so wichtig bei dem beispiel?(soll keine ironische frage sein
)Nein, das ist nicht wichtig, aber es ist einfach der übliche Ansatz, dass man privates privat hält.
-
SeppJ schrieb:
ACnut schrieb:
wobei ich immer noch nicht verstehe wieso man eine klasse benutzt und nicht einfach eine struct. oder ist die automatisch privat gestzten membervariablen durch die klasse so wichtig bei dem beispiel?(soll keine ironische frage sein
)Nein, das ist nicht wichtig, aber es ist einfach der übliche Ansatz, dass man privates privat hält.
ok

-
ACnut schrieb:
Furble Wurble schrieb:
Tatsächlich dachte ich gelesen zu haben:
typedef std::vector<Element> Elementvektor;Die Aufgabe klingt ja auch so als ob das gemeint wäre.
Und dann speicherst Du Instanzen vonElementin dem Vektor, keine Zeiger darauf.d.h.
for (int i=0; i<anzahl;i++) { Element e; e.index = i; e.numgen = //ist jetzt nicht wichtig :) evektor.push_back(e); }Oder ähnlich.
krankes beispiel

Bitte was?
-
Das Beispiel ist schwer krank.
-
Ach, Sone, was täten wir nur ohne dich.

-
Nathan schrieb:
Ach, Sone, was täten wir nur ohne dich.

Spaß am Forum haben?

-
[quote="Furble Wurble"][quote="ACnut"]
Furble Wurble schrieb:
Tatsächlich dachte ich gelesen zu haben:
typedef std::vector<Element> Elementvektor;Die Aufgabe klingt ja auch so als ob das gemeint wäre.
Und dann speicherst Du Instanzen vonElementin dem Vektor, keine Zeiger darauf.Bitte was?
das ist nicht auf dich bezogen sondern auf das beispiel xD
-
...
-
Ja, das wäre lebensrettend gewesen. Einige der inneren Statements waren in einem kritischen Zustand:
e.numgen = //ist jetzt nicht wichtig :)
-
haha xD