2016-11-29 183 views
-1

我试图使用iterator从3D向量中删除一些旧数据。下面是一段我的代码,与此相关的:从多维向量中删除元素

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擦除其中全部测试容器。你需要做的是对dep所属的矢量进行调用擦除。由于dep点由col指向向量的元素,你需要的是

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

感谢弥敦道。如果我需要删除第三维中的所有元素而不是一个? –

+0

@ em.ech如果你想让'col'表示的整个向量清零,那么你只需要'col-> clear();'。 – NathanOliver

0

volvector< vector<vector <int> > >dep是在vector<int>的迭代器。只有vector< vector<vector <int> > >上的迭代器可用作vol->erase的参数。

此外,您不能在写入时使用for循环擦除矢量中的项目。 while循环应该是首选的,因为如果没有删除项目,迭代器只应该增加。

0

dep是最内层向量元素之一内的元素的迭代器,您试图使用它来擦除最外面的向量中的元素。

尝试:

dep = col->erase(dep);