Vector Problem



  • Hallo warum wird hier nicht das letzde Element aus dem Vector gelöscht ?

    data[2]; <-- Da dürfste doch eigentlich gar kein Wert stehen nach dem pop_back();

    #include <vector>
    #include <iostream>
    using namespace std;
    
    int main()
    {
    vector<int> data;
    
      data.push_back(1); 
      data.push_back(2);
      data.push_back(3); 
    
      for(int j=0; j< 3 ;++j)
      {
        cout<<data[j]<<" ";
        cout<<endl;
    
      }
    
        cout<<endl;
          cout<<endl;
    
      data.pop_back();
    
     cout<<data[2];    // gibt eine 3 aus
    
    system("PAUSE");
    }
    


  • Undefiniertes Verhalten. Mehr nicht.



  • Was bedeutet "Undefiniertes Verhalten" ?

    Hier steht: http://magazin.c-plusplus.net/artikel/Aufbau der STL - Teil 1%3A Container

    pop_back()
    löscht das letzte Element aus dem Vektor.

    Was mach ich denn da falsch ?
    Das muss doch irgendwie gehen.



  • ve_ct_or schrieb:

    Was mach ich denn da falsch ?
    Das muss doch irgendwie gehen.

    Du machst nichts falsch, das Element ist logisch gelöscht. Dass du noch darauf zugreifen kannst, wird vom C++-Standard nicht abgedeckt und kann entsprechend Probleme bereiten. Tu es besser nicht.



  • So ein int hat ja eine bestimmte Bitmusterrepräsentation im Speicher. Wenn das Element jetzt aus dem vector gelöscht wird, wird der Speicher zwar freigegeben*, er wird aber nicht überschrieben. Wenn du später auf den Speicher zugreifst, kann dort immer noch das selbe Bitmuster vorliegen, wodurch du den selben Wert erhälst. Das ist aber keineswegs garantiert.

    * Der vector behält den Speicher intern für spätere Elemente, das ist hier aber nicht der Punkt


Anmelden zum Antworten