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