2016-11-29 3 views
-1

Я пытаюсь стереть некоторые старые данные из 3D-вектора, используя 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&)’ 

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

Спасибо

ответ

0

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

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

Благодаря Натан. Что делать, если мне нужно удалить все элементы в третьем измерении вместо одного? –

+0

@ em.ech Если вы хотите, чтобы весь вектор, который 'col' выдал, был очищен, вам просто нужно' col-> clear(); '. – NathanOliver

0

vol является vector< vector<vector <int> > > в то время как dep итератор на vector<int>. В качестве параметра для vol->erase может использоваться только итератор на vector< vector<vector <int> > >.

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

0

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

Try:

dep = col->erase(dep); 
Смежные вопросы