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.
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;
}
Also +1 for not using namespace std;
You are returning a copy of the vector. Because you are returning by value - your call to begin() and end() are for completely different vectors. You need to return a const & to it.
const std::vector<int> &getVec(){return myVec;}
I would do this slightly differently though. I'd make the class act a little like a standard container
class Data
{
public:
typedef std::vector<int>::const_iterator const_iterator;
const_iterator begin() const { return myVec.begin(); }
const_iterator end() const { return myVec.end(); }
};
Data::const_iterator i=myFoo.begin();
while(i != myFoo.end())
{
//
}