迭代器位置矢量擦除

时间:2015-11-05 14:50:11

标签: c++ loops if-statement vector iterator

这里我有一个包含它认为是素数的列表的向量,但是,一些后面的值可以通过列表中较早出现的某些值来除。

为了修正这个问题,我尝试迭代我的向量v,并删除该值,如果它可以被向量中的另一个除以没有余数。

但是我一直收到这个错误("没有匹配的成员函数来调用erase")并且不能想出任何其他方法来删除我的迭代器通过这个循环指向的值。有什么建议吗?

for (vector<int>::iterator it2 = v.begin();it2 != v.end(); ++it2){
    for (vector<int>::iterator it3 = v.begin();it3 != v.end(); ++it3){
        if (*it3%*it2 == 0){
            v.erase (*it2);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

vector::erase使用迭代器。所以你需要:

v.erase(it2);

除此之外,vector::erase使擦除点处或之后的迭代器和引用无效,包括end()迭代器,因此您需要更新迭代器:

if (*it3 % *it2 == 0) {
    auto it3index = it3 - v.begin();
    it2 = v.erase(it2);
    it3 = v.begin() + it3index;
}

或者你可以通过不使用迭代器使整个事情变得更简单:

for (unsigned i = 0; i < v.size(); ++i) {
    for (unsigned j = 0; j < v.size(); ++j) {
        if (v.at(j) % v.at(i) == 0) {
            v.erase(v.begin() + i);
        }
    }
}