【发布时间】:2018-07-11 12:02:47
【问题描述】:
假设我有一堂课:
class sampleVector
{
public:
int a;
int b;
string c;
}
现在我有一个带有多个 sampleVector 对象的向量,但是该向量有 2(multiple) consecutive 个 sampleVector 对象,它们具有相同的 a 值(比如 5)和b(比如说 10)。
现在我想从向量中删除所有具有 a=5 和 b=10 的 sampleVector 对象。
问题是,对于多次连续出现,以下是一种方法:
for (;it!=itEnd;it++)
{
if (it->getA() == 5 && it->getB() == 10)
{
vec.erase(it);
it=vec.begin(); // Resetting this is must
}
}
但我想知道如何为此使用“删除”,因为以下不起作用:
for (;it!=itEnd;it++)
{
if (it->getA() == 5 && it->getB() == 10)
{
vec2.erase(remove(vec2.begin(), vec2.end(), *it), vec2.end()); // doesn't even compile
}
}
当我们有一个原始数据类型的向量并且我们有一个需要删除的特定值时,我们可以使用这种删除方式。但是对于非原始数据类型的向量,我们如何通过传递迭代器而不是值来使用“删除”?
【问题讨论】:
-
为类声明一个
operator ==并使用std::remove或将std::remove_if与可以比较它们的函数一起使用。 -
@Yksisarvinen 我建议你把它变成一个答案。