std::vector::back



  • Tach!

    Ich bin gerade über std::vector::back gestolpert.
    Da wird ein Beispiel gezeigt:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main ()
    {
      vector<int> myvector;
    
      myvector.push_back(10);
    
      while (myvector.back() != 0)
      {
        myvector.push_back ( myvector.back() -1 ); // ******
      }
    
      cout << "myvector contains:";
      for (unsigned i=0; i<myvector.size() ; i++)
        cout << " " << myvector[i];
    
      cout << endl;
    
      return 0;
    }
    

    Output:

    myvector contains: 10 9 8 7 6 5 4 3 2 1 0

    ****** Die Stelle wo die Sternchen sind ist für mich unverständlich...

    Wenn ich myvector.push_back(myvector.back() - 1 ) schreibe, sollte doch immer 9 rauskommen. Oder wie ist das? Stehe gerade voll neben mir 😞

    mit freundlichen grueßen Jonny_Bravo



  • Jonny_Bravo schrieb:

    Wenn ich myvector.push_back(myvector.back() - 1 ) schreibe, sollte doch immer 9 rauskommen. Oder wie ist das? Stehe gerade voll neben mir 😞

    Nur beim ersten Aufruf wird 9 zurückgegeben. Danach wurde die Neun per push_back() angehängt, und das neue letzte Element ist 9. Das bedeutet, back()-1 entspricht nun 9-1 , also 8.



  • Wieso immer? Wenn du einmal das gemacht hast:

    vec.push_back(vec.back() - 1));
    

    wird das neue Ende (push_back) 9 sein. Wenn du nun diese Funktion wieder aufrufst, wird 9 - 1 angehängt. Damit ist das neue back 8 usw.



  • ahhhhhhhhh logisch!
    Danke euch


Anmelden zum Antworten