Стирание элементов из многомерного вектора
Я пытаюсь стереть некоторые старые данные из трехмерного вектора, используя 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
Цикл должен быть предпочтительным, поскольку итератор должен увеличиваться только в том случае, если не был удален элемент.