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 ab
    

    Das 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 😉


Anmelden zum Antworten