从多维向量中删除元素

erasing elements from a multidimensional vector

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

我做错了什么?

谢谢

您正在尝试对整个容器调用 vol 上的擦除。您需要做的是在 dep 所属的向量上调用擦除。由于 dep 指向由 col 指向的向量的一个元素,因此您需要的是

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

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

的参数

此外,您不能在编写向量时使用 for 循环从向量中删除项目。 while 循环应该是首选,因为迭代器应该只在没有项目被擦除的情况下递增。

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

尝试:

dep = col->erase(dep);