从多维向量中删除元素

时间:2016-11-29 21:40:57

标签: c++ vector iterator erase

我尝试使用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&)’

我做错了什么?

谢谢

3 个答案:

答案 0 :(得分:0)

您正尝试将vol上的擦除称为整个容器。您需要做的是在dep所属的向量上调用erase。由于dep指向col所指向的向量元素,所以

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

答案 1 :(得分:0)

volvector< vector<vector <int> > >,而depvector<int>上的迭代器。只有vector< vector<vector <int> > >上的迭代器可以用作vol->erase的参数。

此外,您无法在编写时使用for循环擦除矢量中的项目。 {@ 1}}循环应该是首选,因为如果没有删除项目,迭代器应该只增加。

答案 2 :(得分:0)

dep是一个最里面的向量元素中的元素的迭代器,你试图用它来擦除最外层向量中的元素。

尝试:

dep = col->erase(dep);