2016-11-29 4 views
-1

J'essaie d'effacer certaines anciennes données d'un vecteur 3D en utilisant iterator. Voici un morceau de mon code, lié à ceci:effacement d'éléments à partir d'un vecteur multidimensionnel

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

mais je reçois l'erreur du compilateur:

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

Qu'est-ce que je fais mal?

Merci

Répondre

0

Vous essayez d'appeler effacer sur vol lequel récipient overal. Ce que vous devez faire est d'appeler effacement sur le vecteur auquel appartient dep. Depuis dep des points à un élément du vecteur qui est pointé par col ce que vous avez besoin est

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

Merci Nathan. Que faire si j'ai besoin de supprimer tous les éléments de la troisième dimension au lieu d'un seul? –

+0

@ em.ech Si vous voulez que le vecteur entier que 'col' représente soit effacé, alors vous avez juste besoin de' col-> clear(); – NathanOliver

0

vol est un vector< vector<vector <int> > > alors dep est un itérateur sur un vector<int>. Seul un itérateur sur vector< vector<vector <int> > > peut être utilisé comme paramètre pour vol->erase.

De plus, vous ne pouvez pas effacer des éléments d'un vecteur en utilisant une boucle for comme vous l'avez écrit. while la boucle devrait être préférée car l'itérateur ne doit être incrémenté que si l'élément n'a pas été effacé.

0

dep est un itérateur d'un élément dans l'un des éléments vectoriels les plus internes, et vous essayez de l'utiliser pour effacer des éléments du vecteur le plus à l'extérieur.

Essayez:

dep = col->erase(dep);