C ++:vector.erase(this)

时间:2012-06-16 17:53:55

标签: c++ vector

我有一个std::vector来保存所有对象并在每个帧中传递给它们,这样每个对象都可以访问其他对象。我的问题是对象如何从向量中删除自己?

这不起作用:

vector.erase(this);

还有其他解决办法吗?

5 个答案:

答案 0 :(得分:8)

erase需要一个迭代器。 this是成员函数/类定义中可用的指针。此外,需要在erase的实例上调用vector - 您无法使用vector.erase

对象无法删除自身。您将需要传递一个迭代器。您可以使用std::find来查找对象是否存在于向量中,然后将其传递。

答案 1 :(得分:4)

您需要通过访问其迭代器来删除元素,这可以通过std::find完成,或者如果您通过以下方式知道索引(复杂性较低):

vector.begin() + indexOfElement

以便您可以将其删除:

vector<Type>::iterator it = yourVector.begin() + index;
yourVector.erase(it);

请注意,由于矢量以数组格式存储其数据,会导致您删除的元素之后的所有元素向左移动(这很昂贵)。如果您不需要随机访问,请考虑使用std::list

答案 2 :(得分:1)

或者你可以使用set并使用set.erase(this)

答案 3 :(得分:1)

如上所述,您可以使用std :: find(http://www.cplusplus.com/reference/algorithm/find/)如果我没有弄错,这需要您重载==运算符。

例如

std::vector<YourObjectType>::iterator it = find(yourVector.begin(), yourVector.end(), referenceToObject);

bool operator == (const YourObjectType* object) {return object == this; }

然后你只需使用yourVector.erase(it);

答案 4 :(得分:1)

你可以这样做:

vec.erase(vec.begin() + (this - &vec.front()));

如果您确定该元素确实来自向量