我尝试使用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 :(得分:0)
您正尝试将vol
上的擦除称为整个容器。您需要做的是在dep
所属的向量上调用erase。由于dep
指向col
所指向的向量元素,所以
if ( *dep <= date - 10) {
dep = col->erase( dep );
}
答案 1 :(得分:0)
vol
是vector< vector<vector <int> > >
,而dep
是vector<int>
上的迭代器。只有vector< vector<vector <int> > >
上的迭代器可以用作vol->erase
的参数。
此外,您无法在编写时使用for循环擦除矢量中的项目。 {@ 1}}循环应该是首选,因为如果没有删除项目,迭代器应该只增加。
答案 2 :(得分:0)
dep
是一个最里面的向量元素中的元素的迭代器,你试图用它来擦除最外层向量中的元素。
尝试:
dep = col->erase(dep);