繁体   English   中英

C ++:vector.erase(this)

[英]C++ : vector.erase(this)

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

这不起作用:

vector.erase(this);

还有其他解决方案吗?

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

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

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

vector.begin() + indexOfElement

这样您就可以删除它:

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

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

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

如前所述,您可以使用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);

您可以按照以下方式进行操作:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM