C++ Vector in einer schleife
-
Hallo alle miteinander,
ich habe ein Problem ich wollte in meinem Programm aus Array´s Vectoren machen es gibt keine fehler meldungen nur wenn ich eine eingabe tätige stürzt es ab also wollte ich fragen wie ich Vectoren in For schleifen benutzen kann
ich benutze eine Strukturvoid show(vector<person> contact,int max[1]) { system("cls"); OVERVIEW for(int i=0;i<max[0]-1;i++) {cout<<"Contact: "<<contact[i].personnumber<<endl;} cout<<"Please Press Enter ..."; fflush(stdin); getchar(); return; }Vielen Dank schon mal

-
Bitte ein komplettes und nachvollziehbares Minimalbeispiel zeigen mit einer Beschreibung, was passiert und wie das von Deiner Erwartung abweicht.
-
- Das Array an die Funktion zu übergeben ist mehr als unüblich. Warum übergibst du nicht einfach ein einzelnes int?
- Den vector per Kopie zu übergeben ist auch unüblich und obendrein unperformant. Warum nicht eine (const) Referenz?
- system("cls") ist bestenfalls unportabel. Was soll das?
- OVERVIEW schaut nach Makro aus. Das ist meistens schlechter Stil, warum tust du sowas?
- In der for-Schleife die Abfrage auf i < max[0]-1 laufen zu lassen sieht seltsam aus. Sicher dass du den letzten Kandidaten nicht dabeihaben willst? oder was steht in max?
- Der for-Schleifenkörper mit öffnender und schließender geschweifter Klammer ist unübersichtlich und macht den Code schwerer lesbar.
- Die Einrückung sieht krank aus. Du machst dir das Leben damit nicht leichter.
- fflush(stdin) ist C, su arbeitest aber nebenbei mit C++-Streams. Entscheide dich!Wenn mir jemand solchen Code vorlegen würde würd ich sagen alles löschen und nochmal von vorne, diesmal aber ordentlich.
Davon abgesehen, siehe Krümelkackers Post - und siehe Link in meiner Signatur!
-
So hier noch mal wie ich es mir denke vereinfacht das problem ist das er nach dem ausführen sagt das die exe nicht mehr geht.
#include <iostream> #include <vector> #include <iomanip> using namespace std; int main(){ vector<string> contact; for(int f=0;f<=5;f++) { contact[f]=f; cout<<"Contact: "<<contact[f]<<endl;} system("pause"); }
-
contact hat direkt nach dem Anlegen die Größe 0. Das heißt, er beinhaltet keine Elemente und hat auch keinen Speicher für Elemente reserviert.
Danach schreibst du lustig 5 Zahlen in diesen nicht vorhandenen Speicher hinein. Das führt in deinem Fall dazu, dass "die exe nicht mehr geht" - nennt sich auch Absturz. Typischer Fall von undefiniertem Verhalten. Schau mal im Einsteigerbuch deiner Wahl, wie man mit std::vector umgeht (Stichworte resize, push_back etc.)
-
Die Formatierung ist ja schrecklich. Sieht das so aus, wenn man vorher Python programmiert hat?
Ich weiß jetzt aus'm Kopf nicht mehr, wie "Listen" in Python funktionieren, aber in C++ darfst Du bei einem vector nicht auf Elemente zugreifen, die es gar nicht gibt. Überhaupt darfst/solltest Du in C++ viele Dinge nicht tun. Das per Trial-&-Error herauszufinden ist relativ mühselig. Ich würde Dir davon abraten, in C++ drauf los zu hacken und bestimmte Dinge zu erwarten, "weil es so funktionieren könnte". Lieber erstmal vorher schlau lesen.
-
Überhaupt sollten geschwungene Klammern auf gleicher Höhe liegen, das kann man in deinem Code leicht missverstehen.
-
Dazu inkludierst du Header, die du nicht brauchst, und vergisst welche, die du brauchst (C&P aus dem Netz?)
#include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> contact; for(int f=0 ;f <= 5; ++f) { contact.push_back( f ); std::cout << "Contact: " << contact.back() << '\n'; } }Das dürfte machen was du willst. Kannst ja auch deinen Code behalten und nur einen anderen Konstruktor von std::vector<> verwenden.