Search code examples
c++iteratorstdstdvector

Vector Iterators Incompatible


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

class foo{
public:

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

private:
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
   ++i;
}

The moment I reach this loop, I get the aforementioned error.


Solution

  • 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
      ++i;
    }