em.ech em.ech - 3 years ago 99
C++ Question

erasing elements from a multidimensional vector

I'm trying to erase some old data from a 3D vector, using

iterator
. Here is a piece of my code, related to this:

vector< vector<vector <int> > > vol;
vector< vector< vector<int> > >::iterator row;
vector< vector<int> >::iterator col;
vector<int>::iterator dep;

for (row = this->vol.begin(); row != this->vol.end(); ++row)
{
for (col = row->begin(); col != row->end(); ++col)
{
for (dep = col->begin(); dep != col->end(); ++dep)
{
if ( *dep <= date - 10) {

dep = this->vol.erase( dep );
}
}
}


but I get the compiler error :

no matching function for call to ‘std::vector<std::vector<std::vector<int> > >::erase(std::vector<int>::iterator&)’


What am I doing wrong?

Thank you

Answer Source

You are trying to call erase on vol which to overal container. What you need to do is call erase on the vector that dep belongs to. Since dep points to an element of the vector that is pointed to by col what you need is

if ( *dep <= date - 10) {
    dep = col->erase( dep );
}
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download