Стирание элементов из многомерного вектора

Я пытаюсь стереть некоторые старые данные из трехмерного вектора, используя iterator, Вот фрагмент моего кода, связанный с этим:

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 );
        }
    }
}

но я получаю ошибку компилятора:

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

Что я делаю неправильно?

Спасибо

3 ответа

Решение

Вы пытаетесь вызвать стирание на vol который в общий контейнер. Что вам нужно сделать, это вызвать стирание на вектор, который dep принадлежит. поскольку dep указывает на элемент вектора, на который указывает col что тебе нужно

if ( *dep <= date - 10) {
    dep = col->erase( dep );
}

dep является итератором для элемента в одном из самых внутренних векторных элементов, и вы пытаетесь использовать его для удаления элементов из самого внешнего вектора.

Пытаться:

dep = col->erase(dep);

vol это vector< vector<vector <int> > > в то время как dep является итератором на vector<int>, Только итератор на vector< vector<vector <int> > > может быть использован в качестве параметра для vol->erase,

Более того, вы не можете удалить элементы из вектора, используя цикл for, как вы его написали. while Цикл должен быть предпочтительным, поскольку итератор должен увеличиваться только в том случае, если не был удален элемент.

Другие вопросы по тегам