c++stdvector

Getting front() Of Empty vector Yields Unexpected Behavior


I have a vector, which contains a class object. I declared like this

vector<Aircraft> queue;

I erase the first element in the vector. But it seems like the first element still in the vector. I did this.

queue.erase(queue->begin());
cout<<queue.size(); //printed 0 
Aircraft temp = queue.front();
cout<<temp.id; //expected a segfault error

The size of the vector is 0 after I erased the first element (there was only one element). I was expecting a seg fault error when I tried to see the id of temp (Aircraft) since I erased the first element from the vector and the size is zero after that. I even cleared the vector but 'queue.front' still returns the object and cout statement still prints the id of the object.


Solution

  • It's undefined behavior to access the front() of a vector that is empty so you must not do it and you can't infer anything from the apparent behavior of your program if you do do it.

    The fact that queue.size() is one less than before the .erase call should tell you that erase has worked.