Array dynamisch vergrößern
-
Hi Ponto,
wie kann ich in der Funktion auf die verschiedenen Strukt-Elemente (.Inhalt) zugreifen, wenn ich per push_back erweitere?
Kenne mich damit überhaupt nicht aus...Steffen
-
Ponto schrieb:
Der größte Fehler ist, dass du anstatt std::vector zu benutzen dich mit Arrays herumplagst.
wäre kein fehler, es einmal selber hingekriegt zu haben, bevor man die stl bemühlt. ich würde das nicht als größten fehler werten, sondern als große chance, sich von denen abzuheben, die gar nix können (und auch nie mehr dazulernen werden).
-
http://www.cppreference.com/cppvector.html
Einen Beitrag zu dynamischen Arrays findest du auch auf meiner Homepage!
-
volkard schrieb:
Ponto schrieb:
Der größte Fehler ist, dass du anstatt std::vector zu benutzen dich mit Arrays herumplagst.
wäre kein fehler, es einmal selber hingekriegt zu haben, bevor man die stl bemühlt. ich würde das nicht als größten fehler werten, sondern als große chance, sich von denen abzuheben, die gar nix können (und auch nie mehr dazulernen werden).
Natürlich ist es gut es mal selbst hinzukriegen. Aber ich würde die Reihenfolge für Beginner so setzen: Erst std::vector lernen und zu nutzen verstehen und dann irgendwann mal Arrays lernen, und wenn man dann noch Lust hat, kann man einen vector mit Arrays implementieren um es genau zu verstehen.
Meiner Meinung nach sollte man Anfängern den Weg nicht zu steil machen und Arrays sind harte Kost. Sollte ich jemals in die Verlegenheit kommen, jemandem C++ nahezubringen, wären Arrays erst im vorletzten oder letzten Kapitel dran.
-
gs_zk_sed schrieb:
Hi Ponto,
wie kann ich in der Funktion auf die verschiedenen Strukt-Elemente (.Inhalt) zugreifen, wenn ich per push_back erweitere?
Kenne mich damit überhaupt nicht aus...Steffen
Genauso wie bei einem Array. Ein std::vector ist wie ein Array, wo du dir keine Gedanken um den ganzen Speicherquatsch machen musst. Ein clear() leert den vector. Falls der schon vorher leer war, ist das clear() natürlich nicht notwendig. Die push_back() hängen die Elemente an den vector ran. Das erste Element ist an Position [0], das zweite [1]. Du kannst also mit MyStruct[0].Inhalt auf das erste Element zugreifen.
Du brauchst dir auch nicht zu merken, wieviele Elemente insgesamt im vector sind. Das macht der für dich. Mit size() hast du immer die korrekte Anzahl im vector.
-
Alles klar, Ponto. Vielen Dank!
-
Ponto schrieb:
Meiner Meinung nach sollte man Anfängern den Weg nicht zu steil machen und Arrays sind harte Kost.
Also wenn Arrays für dich harte Kost sind, dann solltest du dir nochmal überlegen ob C++ das richtige für dich ist. Imo gehört das noch zu den einfacheren Sachen von C++.
Ponto schrieb:
Aber ich würde die Reihenfolge für Beginner so setzen: Erst std::vector lernen und zu nutzen verstehen und dann irgendwann mal Arrays lernen
Sehe ich nicht so. Erstmal sollte man sich die grundlegenden Sprachmittel von C++ erarbeiten und dazu gehören halt auch die builtin Arrays. Erst wenn man diese Sachen drauf hat, kann man sich auf Libs stürzen, die einem das Leben erleichtern. Und die STL ist da für Noobs ein guter Start.
-
Also wenn Arrays für dich harte Kost sind, dann solltest du dir nochmal überlegen ob C++ das richtige für dich ist. Imo gehört das noch zu den einfacheren Sachen von C++.
Hi groovemaster2002,
irgendwie habe ich wohl den Sinn eines Forums anders in Erinnerung. Geht es nicht darum, daß man sich gegenseitig bei Problemen hilft - gerade, wenn es nur an Kleinigkeiten hängt? Ich weiß nicht, was solche Leute wie Du davon haben, ständig ihre abwertenden Kommentare abgeben zu müssen. Es geht hier daraum, etwas zu lernen. Wenn Du etwas weißt, teile es mit - und laß den Blödsinn sein! Immerhin konntest Du mir keinen Lösungsansatz nennen...
Alles klar?
-
Ich glaube das der Groovemaster selbst, die doch so "einfachen Sachen" von C++ nicht versteht, sonst hätte er einen qualitativeren Beitrag mit einer Lösung abgegeben und nicht solche verbalen Ausdünstungen. Ich finde es schade das sich solche User hier auf diesem Board noch befinden. Keiner ist Allwissend und Wissen ist da es weiterzugeben. Die Elite der "Computerexperten" gibt es schon lange nich mehr
grüße cable
-
gs_zk_sed schrieb:
irgendwie habe ich wohl den Sinn eines Forums anders in Erinnerung. Geht es nicht darum, daß man sich gegenseitig bei Problemen hilft - gerade, wenn es nur an Kleinigkeiten hängt?
Du redest selbst von Kleinigkeiten und regst dich über meinen Post auf? Versteh ich nicht.
Ausserdem war mein Kommentar keinesfalls abwertend, da hast du was falsch verstanden. Ich wollte lediglich darauf hinweisen, dass es wesentlich komplexere Sachen gibt, wie Polymorphismus, Templates, etc. Ganz zu schweigen von diversen Design Patterns.
Ausserdem hab ich manchmal das Gefühl, das Noobs einfach drauf losprogrammieren, weil sie vielleicht denken, sie können C also kann man auch C++. Das bisschen Klassenhandling lernt man ja nebenbei. Ich will dir nix unterstellen, aber dein Code weist genau solche Anfängerfehler auf. Vielleicht sagt dir das SprichwortErst die Arbeit, dann das Vergnügen.
was. Erstmal sollte man sich, bevor man anfängt, sein erstes Programm zu schreiben, mit den Grundlagen befassen. Entweder man liest dafür ein gutes Buch, oder sucht im Netz nach entsprechenden Tutorials. Auf dieser Seite gibts davon bereits 'ne ganze Menge.
Ich hab selbst erst vor ca. 1,5 Jahren mit C++ angefangen und davor viele Jahre nur C programmiert und bin noch weit entfernt mich als C++ Pro zu sehen. Sicherlich ist es nicht einfach, sich von eingebrannten Verfahren zu verabschieden, aber besser man macht es sofort als später oder nie. Und dazu gehört es einfach die richtige Lektüre durchzuarbeiten oder auf die Vorschläge von Foren wie diesem zu hören, und nicht gleich die eingeschnappte Leberwurst spielen.gs_zk_sed schrieb:
Wenn Du etwas weißt, teile es mit - und laß den Blödsinn sein! Immerhin konntest Du mir keinen Lösungsansatz nennen...
Wieso sollte ich zu deinem Code noch was mitteilen, alles relevante wurde doch schon gesagt. Wenn du aber trotzdem noch ein paar Tipps möchtest, ok:
struct tMaske *MyStruktTemp = 0; //Temporär MyStrukt= new strukt [1]; MyStrukt[1].Inhalt = "Test"; MyStruktTemp= new strukt [2]; //Neuen Speicher zuweisen
Definiere Variablen dort, wo du sie brauchst. Es macht also keinen Sinn MyStruktTemp mit null zu initialisieren, ín 2 weiteren Codezeilen nicht zu benutzen, um dann einen neuen Wert zuzuweisen.
MyStruktTemp= 0;
Du brauchst MyStruktTemp am Ende nicht null zuweisen, da du MyStruktTemp eh nicht mehr verwendest und nach Aufruf der Funktion tot ist.
return;
Hat eine Funktion keinen Rückgabewert (void), kannst du dir das return sparen.
printf (MyStrukt[i].Inhalt.c_str());
In C++ verwendet man für die Konsolenausgabe std::cout.
cable2k3 schrieb:
Die Elite der "Computerexperten" gibt es schon lange nich mehr
Doch, gibt es.
Hume
-
struct foo *ptr; //<-- das ist C foo *ptr; //<-- das ist C++
und Variablen muss man schon lange nicht mehr (noch nicht mal mehr in C) am Anfang eines Blocks deklarieren. Man deklariert Variablen am besten immer so spät wie es geht!