Algorithmen der STL verweigern ihren Dienst



  • Verwende ich die Algorithmen gemäß der im Buch (B.Stroustrup/Programmieren in C++) angegebenen Syntax, passiert rein gar nichts.

    Darstellung am Beispiel „copy“:

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <iterator>

    using namespace std;

    char* a = "Arafat";
    char* b;

    void f (const vector<char*>& a, vector<char*>& b)
    {
    copy (a.begin(), a.end(), b.begin());
    };

    int main()
    {
    cout<<a<<"\t"<<b;
    };

    Laut Fehlerprotokoll ist dieses Programm einwandfrei. Nur: Die Zeichensequenz von „a“ wird keineswegs nach „b“ kopiert. „int main“ zeigt nur den Inhalt von „a“ an, für „b“ wird gar nichts angezeigt. Woran könnte das liegen?



  • man sollte f dann auch mla in main aufrufen und a und b übergeben...



  • ..und vielleicht solltest Du auch b etwas zuweisen 🙄

    char* a = "Arafat";
    char* b = " und was danach kommt";
    


  • Öhm, nee. Das ganze Beispiel ist vermurkst. Nirgendwo wird ein vector-Objekt erstellt. Da sind so Aussagen wie die von 1310-Logik verfrüht.



  • Außerdem sind a und b vom Typ char* und keine vector<char*> und können also auch nicht an die Funktion übergeben werden.

    Versuch doch das selbe mal mit strings:

    void f (const string & a, string & b)
    {
      copy (a.begin(), a.end(), b.begin());
    };
    
    int main()
    {
      string a = "blablabla";
      string b = "hfjkasdhfjkadshjfhdsjk";
    
      cout << a << "\t" << b << "\n";
      f(a,b);
      cout << a << "\t" << b << endl;
    }
    


  • Jester du solltest vielleicht noch erwähnen, dass b bereits genügend speicher reserviert haben muss.



  • Wenn nicht, ists auch nicht schlimm: back_inserter schafft Abhilfe.

    void f (const string & a, string & b)
    {
      copy (a.begin(), a.end(), back_inserter(b));
    };
    
    int main()
    {
      string a = "blablabla";
      string b;
    
      cout << a << "\t" << b << "\n";
      f(a,b);
      cout << a << "\t" << b << endl;
    }
    


  • ..und vielleicht solltest Du auch b etwas zuweisen 🙄

    sonst macht es einfach keinen Sinn



  • 1310-Logik schrieb:

    ..und vielleicht solltest Du auch b etwas zuweisen 🙄

    sonst macht es einfach keinen Sinn

    Ich glaub du hast nen Fehler in der Logik:

    void f (const string & a, string & b)
    {
      copy (a.begin(), a.end(), back_inserter(b));
    };
    
    int main()
    {
      string a = "blablabla";
      string b;
    
      cout << a << "\t" << b << "\n";
      f(a,b);
      cout << a << "\t" << b << endl;
    }
    

    Ausgabe:

    blablabla
    blablabla blablabla



  • 1310-Logik: Jetzt lass mal deine Augenrollereien. Ich weise b etwas zu.



  • ja sorry
    ich sehs ja jetzt auch
    *indereckestehundschäm*



  • Kein Wunder, dass die Algorithmen bei mir ihren Dienst verweigert haben...
    Vielen Dank für die Hilfe!

    Alex


Anmelden zum Antworten