Hilfe bei vector [c++]

11/03/2010 14:03 MrSimonKeks#1
Hilfe bei vector
Ja, ich weiß, dass ich vieles frage. Aber man muss den Code ja auch verstehen den man schreibt und nicht einfach auswendig lernen...
Vorweg:
Ein vector ist sozusagen ein Datencontainer wo mehrere Daten eines Types z.B. int gespeichert werden. Also im Prinziep das selbe wie ein array.Mein Problem:
Ich lese gerade ein Buch: Einführung in die Programmierung mit C++ von Bjarne Stroustrup (Erfinder von C++)
Nun werden in diesem Buch nicht Arrays sondern Vectoren verwendet. die man so bestimmt:
Code:
vector<int>zahlen;
Jetzt steht in meinem Buch folgender Code,der Wörter einliest, diese sortiert, und ohne Wortwiederholungen ausgiebt(ich makiere die Stellen die ich nicht verstehe:
Code:
int main()
{
     vector<string> words; //versteh ich
     string temp;   //verstehe ich
     while(cin>>temp)   //-||-
       words.push_back(temp);    //-||-
      cout<<"Anzahl Woerter:"<<word.size()<<endl;   //-||-
     sort(words.begin(),words.end()); //-||-
     for(int i=0; i<words.size(); ++i)  // nicht verstehen 1
      if(i=0 || words[i-1]!=words[i])  // nicht verstehen 2
       cout<<words[i]<<"\n";  //nicht verstehen 3
}
Nicht verstehen 1:
Ich verstehe, dass die Schleife immer weiter geht bis i>die anzahl wörter im vector words ist.
Das hat auch nur mit den nachfolgenden Fragen zu tun...
Nicht verstehen 2:
Das verstehe ich komplett nicht...bin halt kein Übergott ;D
Nicht verstehen 3:
Weßhalb wird der words vector mit words[i] aufgerufen????

Es wäre nett wenn ihr mir bei meinen Problemen helfen könntet damit ich gleich mit dem nächsten Kapitel weitermachen kann...
Mfg Simon
11/03/2010 14:09 bammes#2
|| bedeutet glaub ich ODER

dann && UND
11/03/2010 14:13 MrSimonKeks#3
Quote:
Originally Posted by bammes View Post
|| bedeutet glaub ich ODER

dann && UND
Ich meine nicht, dass ihr mir die Bedeutung der Operatoren erklärt ;) Ich würde gerne wissen was da abläuft um es richtig zu verstehen Beispiel:
Code:
while(cin>>y)
Erklärung die while-Schleife läuft so lange weiter bis das einlesen von y unterbrochen wird durch z.B. ein ungültiges Zeichen ( bei int z.B. |).
So etwas wäre sehr hilfreich!!!
Mfg Simon
11/03/2010 15:33 Bot_interesierter#4
Code:
for(int i=0; i<words.size(); ++i)  //Schleife läuft bis i==size-1  
      if(i=0 || words[i-1]!=words[i])  /* Wenn i=0 oder das vorherige Wort ungleich dem aktuellen*/
            cout<<words[i]<<"\n";  //gibt das Wort am Index i  und ein newline aus
Code Kommentiert.
11/03/2010 15:49 MrSimonKeks#5
Quote:
Originally Posted by Bot_interesierter View Post
Code:
for(int i=0; i<words.size(); ++i)  //Schleife läuft bis i==size-1  
      if(i=0 || words[i-1]!=words[i])  /* Wenn i=0 oder das vorherige Wort ungleich dem aktuellen*/
            cout<<words[i]<<"\n";  //gibt das Wort am Index i  und ein newline aus
Code Kommentiert.
Danke, hab alles verstanden bis auf das mit den words[i] was \n heißt weiß ich bloß warum man die Wörter aus dem vector mit words[i] aufruft verstehe ich nicht ganz.temp speichert die Wörter doch im vector...
Mfg Simon
11/03/2010 15:54 Bot_interesierter#6
Lies doch bitte die Dokumentation zur Vector Klasse.
[] ist der Randomaccess Operator für den Vector, damit wird auf ein Element am Index der zwischen den eckigen Klammern steht zugegriffen.
Die Syntax ist in diesem Fall die selbe wie bei Arrays, schau dir einfach mal die Klassendefinition an.
edit: zum Beispiel hier [Only registered and activated users can see links. Click Here To Register...]
11/03/2010 19:05 MrSimonKeks#7
Hmmm, das ist ja schön und gut aber ich verstehe kein Wort ;D
Kann sein das die Lösung für meine Frage dort vorhanden ist...
Aber ich stelle jetzt einmal die Frage direkt:
Wieso wird bei words[i] in den Klammern [] gerade i aufgerufen??? Auf mein Beispiel bezogen.
Mfg Simon
p.s. Ich bin doch auch nur ein Achtklässler ;D
edit: auf Index i zugreifen ist ja schön und gut aber wieso wird auf i zugegriffen wenn man auf den vector zugreifen möchte? Ich sehe gerade den Wald voller Bäume nicht habe ich so das gefühl :D
11/03/2010 19:13 MoepMeep#8
Quote:
Originally Posted by BliszZ View Post
Hmmm, das ist ja schön und gut aber ich verstehe kein Wort ;D
Kann sein das die Lösung für meine Frage dort vorhanden ist...
Aber ich stelle jetzt einmal die Frage direkt:
Wieso wird bei words[i] in den Klammern [] gerade i aufgerufen??? Auf mein Beispiel bezogen.
Mfg Simon
p.s. Ich bin doch auch nur ein Achtklässler ;D
edit: auf Index i zugreifen ist ja schön und gut aber wieso wird auf i zugegriffen wenn man auf den vector zugreifen möchte? Ich sehe gerade den Wald voller Bäume nicht habe ich so das gefühl :D
Weil auf das i. elemente des Vectors zugegriffen wird. i ist in dem Fall der Index.

btw sicher, dass da
Code:
 if(i = 0)
und nicht
Code:
 if(i == 0)
steht? :p
11/03/2010 19:40 MrSimonKeks#9
Boahr... ich glaube ich habe es jetzt sogar verstanden :D
Das i ist in diesem Fall der Allgemeine befehl in den Klammern von words[i] welcher auf den Index (Inhalt) von dem words-vector zuzugreifen. Habe ich recht???
Dann wäre es echt recht simpel :D
Mfg Simon
Edit: Schnell mal nachgeschlagen und du hast recht, da steht wirklich i==0 O.o
MoepMeep kann hellsehn ;D
11/03/2010 19:42 MoepMeep#10
Quote:
Originally Posted by BliszZ View Post
Boahr... ich glaube ich habe es jetzt sogar verstanden :D
Das i ist in diesem Fall der Allgemeine befehl in den Klammern von words[i] welcher auf den Index (Inhalt) von dem words-vector zuzugreifen. Habe ich recht???
Dann wäre es echt recht simpel :D
Mfg Simon
i ist eine Variable.
11/03/2010 20:00 MrSimonKeks#11
Quote:
Originally Posted by MoepMeep View Post
i ist eine Variable.
Ich bin dumm.
i ist die Variable die überprüft ob das geschriebene Wort mit einem davor übereinstimmt...
So.... hehe...warum wird mit words[i] jetzt der Index von dem vector words aufgerufen obwohl i nur eine Variable ist die überprüft ob das vorherige wort mit dem jetztigen übereinstimmt... Jetzt habt ihr mich vollends verwirrt ^^
Mfg Simon
11/03/2010 21:05 Bot_interesierter#12
i ist einfach ein integer der in der for Schleife inkrementiert wird, bis er um eines kleiner ist als die Größe des Vektors.
Du kannst auf die Elemente im Vektor über ihren Index zugreifen, der erste Index ist 0, der nächste 1 usw.
Das müsstest du eigentlich von normalen Arrays her schon kennen, wenn du zum Beispiel alle Elemente eines Arrays mit 6 Elementen ausgeben möchtest, dann würdest du so eine Schleife machen:
Code:
int array[] = {1,2,3,4,5,6};
for(int i=0;i<6;i++)
     cout <<array[i]<<"\n";
Die Klasse std::vector ist ein Container der sich ähnlich wie ein Array verhält, aber sich um die Speicherverwaltung kümmert und eine reihe nützliche Funktionen bietet.
Nur Pointerarithmetik unterstützt ein std::vector nicht, dafür gibt es die Iteratoren die du sicher auch bald kennen lernen wirst.

Und eines noch, wenn nach dem Kopf einer for-Schleife keine geschweiften Klammern stehen, so ist nur der Code bis zum nächsten Semikolon der Schleifenkörper, für den Fall dass du das noch nicht kennst.
11/03/2010 21:59 MrSimonKeks#13
Ok ich habe es jetzt verstanden. Habe aber noch 2 Fragen:
1. Gibt es ein befehl zb. words[all] was dann alle eingeschpeicherten werte wiedergibt???
2. Ist bei deinem Beispiel
Code:
cout<< array[i]<<'\n';
dass letzte gespeicherte Wort oder was wird dann ausgegeben? z.B. bei dir jetzt:
3 5 2
2 // die letzte gespeicherte Zahl
oder was würde denn da stehen?
p.s. In den Buch was ich lese wurde nicht über Arrays gesprcohen kommt vielleicht noch.
Mfg Simon
Edit: Ich habe das Gefühl ich habe es immer noch nicht richtig verstanden ^^
Du kannst mir ja eine pn schicken dann brauche ich hier nicht so rumzuspammen ;D
11/03/2010 22:20 Bot_interesierter#14
1.
Nein das gibt es nicht, denn der [] Operator liefert nur Referenzen auf Elemente im Vektor zurück.
2.
Die Ausgabe meines Beispiels ist einfach:
1
2
3
4
5
6
11/04/2010 06:39 MrSimonKeks#15
Hmm wie würde man es denn machen wenn man irgendwann später alle gespeicherten Werte für vector ausgeben möchte für z.B ein Telefombuch???