Problem mit Vector
-
#include <iostream> #include <vector> using namespace std; void Test( vector<char> &dat ) { dat.push_back('A'); dat.push_back('B'); } int main() { vector<char>dat; Test( dat ); dat[dat.size()]='\x00'; cout<< &dat[0] ; // Gibt alles aus was im Vector steht return 0; }Wie kann ich einen string Vector komplett ausgeben?
Ich will halt das hier z.b. im Hauptprogramm Str1Str2 ausgeben wird.
Oder muss ich bei einem string Vector immer direkt auf die einzelnen Elemente zugreiffen also z.b.Bei mir wird immer nur die Speicheradresse vom ersten Element des Vectors ausgegeben.
cout<<dat[0]; // Gibt Str1 aus cout<<dat[1]; // Gibt Str2 aus#include <iostream> #include <vector> using namespace std; void Test( vector<string> &dat ) { dat.push_back("Str1"); dat.push_back("Str2"); } int main() { vector<string>dat; Test( dat ); cout<< &dat[0]; // Soll alles ausgeben was im Vector steht return 0; }
-
ve_ctor schrieb:
int main() { vector<char>dat; Test( dat ); dat[dat.size()]='\x00'; //!!! cout<< &dat[0] ; // Gibt alles aus was im Vector steht return 0; }Was passiert wohl, wenn du in einem vector, der genau zwei Elemente enthält, das dritte Element überschreibst? Richtig. Das tut dem vector weh...
Wie kann ich einen string Vector komplett ausgeben?
du hast hier keinen vector aus strings, sondern einen vector aus char. Allgemein gibst du alles was im vector aus, indem du per schleife drüber läufst.
Ich will halt das hier z.b. im Hauptprogramm Str1Str2 ausgeben wird.
Das wird nie passieren, wenn du nur 'A' und 'B' im vector hast. Hast du evtl. Deinen Code nicht kopiert sondern nur so halbwegs sinngemäß aufgeschrieben? dann lies dir bitte mal die Links in meiner Signatur durch. (Wie man das mit als wichtig gekennzeichneten Threads immer tun sollte, bevor man das erste mal was postet).
Bei mir wird immer nur die Speicheradresse vom ersten Element des Vectors ausgegeben.
Du gibst ja auch nur die Adresse des ersten Elements an cout. Anders als mit einer Schleife gehts hier nicht.
-
dat[dat.size()]='\x00'; //!!!Stimmt das war dumm mein Vector geht ja nur von Element 0 bis 1 Element 2 gehört ja gar nicht mehr dazu.^^
Dann wäre es wohl besser wenn ich die Funktion so schreiben würde oder?
void Test( vector<char> &dat ) { dat.push_back('A'); dat.push_back('B'); dat.push_back('\x00'); }pumuckel schrieb:
Das wird nie passieren, wenn du nur 'A' und 'B' im vector hast. Hast du evtl. Deinen Code nicht kopiert sondern nur so halbwegs sinngemäß aufgeschrieben? dann lies dir bitte mal die Links in meiner Signatur durch. (Wie man das mit als wichtig gekennzeichneten Threads immer tun sollte, bevor man das erste mal was postet).
Das war auf das zweite Code Beispiel bezogen nicht auf das erste. Aber egal die Frage hast du mir ja schon beantwortet danke.
-
Ve_ctor schrieb:
dat[dat.size()]='\x00'; //!!!Stimmt das war dumm mein Vector geht ja nur von Element 0 bis 1 Element 2 gehört ja gar nicht mehr dazu.^^
Schalte den Debugmodus ein, der die von dir verwendete Standardbibliothek sicherlich anbietet. Siehe hier oder hier.