frage zur dynamischen variablen erzeugung
-
Hier wird vector gemeinsam mit fstream verwendet. Eine genauere Erklärung findest Du in jedem brauchbaren C++-Buch.
Im Grunde brauchst Du nicht mehr zu tun, als folgendes:
std::vector<int> zeugs; zeugs.push_back(7); zeugs.push_back(4); zeugs.push_back(9); zeugs.push_back(2);Und in zeugs[0] bis zeugs[3] findest Du die eingefügten Werte wieder.
Aber wie gesagt, lies dazu lieber im C++-Buch Deiner Wahl nach.
-
ok, hab jetzt soweit verstanden wie das mit vector funzt.
nur wenn ich jetzt eine vector<string> variable global deklarier, wie frag ich dann zb das erste
element ab?vector<string> wort; void WortLaden() { ~~ wort mit mir werten versogt ~~ for (int a = 0; a < 5; a++) { cout << wort.at(a) << endl; } }Bekomm ich folgende Meldung vom Compiler:
error C2679: Binaerer Operator '<<' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<c
har> >' akzeptiert (oder keine geeignete Konvertierung moeglich)
-
ich bin ein wenig überrascht, denn ob du es global machst oder nicht,
sollte imho nichts daran ändern, dass es einen operator << für std::string gibt.
Naja der fehler gehta auch vom binären << aus, was ich merkwürdig finde.
Ich hab grad das hier getestet#include<iostream> #include<vector> #include<string> int main(){ std::vector<std::string> zeugs; zeugs.push_back("7"); zeugs.push_back("4"); zeugs.push_back("9"); zeugs.push_back("2"); for (int a = 0; a < 4;++a) { std::cout << zeugs.at(a) << std::endl; } }und es lief völlig einwandfrei durch. ob der vector nun in der main oder global deklariert war...
-
ok, das funzt.
hatte vergessen die <string> einzubinden.
Jetzt hab ich mal ne ganz andere frage.
Ich habe bis jetzt in C programmiert und seh grad dass es sich von C++ doch sehr stark unterscheidet.
in C++ verwendet man also eher string als char oder seh ich das jetzt falsch ?
wenn man mit vector und string ja eigentlich alles machen kann was ein char bzw array kann,
wozu braucht man dann noch char ? Für einzelne Zeichen ?ich habe in dem Code den ich schreibe unter den #includes using namespace std; stehen. Du allerdings nicht, dafür schreibst du jedesmal std:: vor die funktion. Welchen Unterschied macht das ?
Und nochwas *fg*, in C verwende ich sprintf um Text und andere Variablen in eine bestimmte Variable zu schreiben.
sprintf(constr,"%s",test);Wie lautet das eqvivalent für C++ ? Oder ist auch hier sprintf zu verwenden ?
Wenn ja, welchen Platzhalter verwendet man dann für ein vector element ? mit %s stürzt das Prgramm ab ?sprintf(constr,"%s",v.at(1)); // Stürzt abDas zusammenschneiden bis string geht ja über das + , aber wenn ich ein element eines vectors hinzufügen will, geht das ja nich:
string constr = "Element 1 von vecotr v " + v.at(1);Das bringt mir dann aber : Zeiger können nicht addiert werden.
Fragen über Fragen.
Danke schonmal dass ihr nem C++ Neuling bißchen auf die Sprünge helft.
-
in C++ verwendet man also eher string als char oder seh ich das jetzt falsch ?
In 99% der Fälle: Ja.
wozu braucht man dann noch char ? Für einzelne Zeichen ?
Manchmal meint einer, der vector oder der string frisst zuviel Speicher und Ressourcen, dann nimmt er wieder char[]. Aber char kann z.B. ganz nützlich sein, um einen einzelnen Buchstaben einzulesen, vgl. Menüauswahl.
Wie lautet das eqvivalent für C++ ? Oder ist auch hier sprintf zu verwenden ?
Nope, es gibt stringstreams, siehe FAQ ("Einmal Zahl nach String" oder so).
Und vector kann man so ausgeben:
vector<int> myVec; for (int i=0;i<10;++i) { myVec.push_back(i); cout<<myVec[i]<<'\n'; }; //Oder mit Iteratoren for (vector<int>::iterator i=myVec.begin();i!=myVec.end();++i) cout<<*i<<'\n';
-
std::vectors kann man auch via std::copy nach std::cout ausgeben, das dürfte wohl am elegantesten und schnellsten sein.
-
wie ich den vector ausgebe, hab ich mittlerweile begriffen

aber wie das mit den stringstreams läuft hab ich net verstanden.
Sagen wie mal ich möchte das 3 element von vector v in einen string kopieren.
der string soll nacher das ausgeben: Element 3 von vector v ist Hallo.
ich würde jetzt davon ausgehen, dass man das so macht:
vector<string> v; v.push_back("Test"); v.push_back("Ich"); v.push_back("Hallo"); string Ausgabe = "Das 3. Element von vector v ist " + v.at(3); cout << Ausgabe << endl;Ich brauch das in nem string weil der string nachher weitervearbeitet wird.
Aber wie gesagt, dann kommt Zeiger kann nicht addiert werden.
Wie mach ich das jetzt mit stringstreams ?
stringstream str; str << "Das 3. Element von vector v ist " + pws.at(a); cout << "str: " << str.str() << endl;Das geht ja auch nich. Man man man, wäre ich doch bloß bei C geblieben

-
Kleines Beispiel
#include <iostream> #include <string> #include <sstream> #include <vector> #include <algorithm> #include <iterator> using namespace std; int main() { vector<string> v; v.push_back("Test"); v.push_back("Ich"); v.push_back("Hallo"); stringstream str; copy(v.begin(), v.end(), ostream_iterator<string> (str, ",")); cout << str.str() << endl; str.str(""); str << v[1] << " sage " << v[2] << endl; string s = str.str(); cout << s; return 0; }Kurt
-
Code-Yunkee schrieb:
vector<string> v; v.push_back("Test"); v.push_back("Ich"); v.push_back("Hallo"); string Ausgabe = "Das 3. Element von vector v ist " + v.at(3); cout << Ausgabe << endl;Kleiner Hinweis: Auch in Vektoren beginnt der Index bei 0 - d.h. du versuchst auf ein (nicht existierendes) viertes Element zuzugreifen.
Ich brauch das in nem string weil der string nachher weitervearbeitet wird.Wie mach ich das jetzt mit stringstreams ?
Wenn du die Daten direkt ausgeben willst, brauchst du den Umweg über stringstream übrigens nicht - dafür gibt es cout:
cout<<"Das 3. Element von v ist "<<v.at(2);
-
ok, hab ich jetzt begriffen

1000 Danke für eure Hilfe.
Hab zwar noch eine Frage, die hat aber nichts mit diesem Thema zutun und deshalb neuer Thread
