IG83 IG83 - 1 year ago 220
C++ Question

Vector Iterators Incompatible

I am new to C++ in general so excuse me if I am overlooking something obvious.

I have a class with a std::vector data member e.g.

class foo{

const std::vector<int> getVec(){return myVec;} //other stuff omitted

std::vector<int> myVec;


Now at some part of my main code I am trying to iterate through the vector like this:

std::vector<int>::const_iterator i = myFoo.getVec().begin();
while( i != myFoo.getVec().end())
//do stuff

Now the moment I reach this loop, I get the aforementioned error. I don't understand what's going on. Any help is appreciated!

Answer Source

The reason you are getting this, is that the iterators are from two (or more) different copies of myVec. You are returning a copy of the vector with each call to myFoo.getVec(). So the iterators are incompatible.

Some solutions:

Return a const reference to the std::vector<int> :

const std::vector<int> & getVec(){return myVec;} //other stuff omitted

Another solution, probably preferable would be to get a local copy of the vector and use this to get your iterators:

const std::vector<int> myCopy = myFoo.getVec();
std::vector<int>::const_iterator i = myCopy.begin();
while(i != myCopy.end())
  //do stuff

Also +1 for not using namespace std;