这里有一个向量,它包含一个它认为是素数的列表,然而,后面的一些值可以被列表中前面出现的一些值除。
为了修改这一点,我尝试在向量v周围迭代,如果它可以被向量中的另一个除,并且没有余数,则删除该值。
然而,我一直收到这个错误("没有匹配的成员函数可以调用擦除"),并且想不出任何其他方法来删除迭代器通过这个循环指向的值。有什么建议吗?
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);
}
}
}
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);
}
}
}