从多维向量中删除元素
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 );
}
vol
是 vector< vector<vector <int> > >
而 dep
是 vector<int>
上的迭代器。只有 vector< vector<vector <int> > >
上的迭代器可以用作 vol->erase
.
的参数
此外,您不能在编写向量时使用 for 循环从向量中删除项目。 while
循环应该是首选,因为迭代器应该只在没有项目被擦除的情况下递增。
dep
是指向最内层向量元素之一的元素的迭代器,您正试图用它来擦除最外层向量中的元素。
尝试:
dep = col->erase(dep);
我正在尝试使用 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 );
}
vol
是 vector< vector<vector <int> > >
而 dep
是 vector<int>
上的迭代器。只有 vector< vector<vector <int> > >
上的迭代器可以用作 vol->erase
.
此外,您不能在编写向量时使用 for 循环从向量中删除项目。 while
循环应该是首选,因为迭代器应该只在没有项目被擦除的情况下递增。
dep
是指向最内层向量元素之一的元素的迭代器,您正试图用它来擦除最外层向量中的元素。
尝试:
dep = col->erase(dep);