C++ : vector.erase(this)
C++ : vector.erase(this)
我有一个std::vector
,它保存所有对象并在每一帧中传递给它们,以便每个对象都可以访问其他对象。我的问题是对象如何从向量中删除自身?
这不起作用:
vector.erase(this);
还有其他解决方案吗?
erase
需要一个迭代器。 this
是成员函数/类定义中可用的指针。此外,erase
需要在vector
实例上调用 - 您不能使用 vector.erase
。
对象无法自行删除。您将需要传递一个迭代器。您可以使用std::find
来查找对象是否存在于向量中,然后将其传递。
您需要通过访问其迭代器来删除元素,这可以通过 std::find
来完成,或者如果您通过以下方式知道索引(复杂性较低):
vector.begin() + indexOfElement
以便您可以删除它:
vector<Type>::iterator it = yourVector.begin() + index;
yourVector.erase(it);
请注意,由于向量以数组格式存储其数据,这会导致您要删除的元素之后的所有元素向左移动(这很昂贵)。如果不需要随机访问,请考虑改用std::list
。
或者你可以使用一个集合并使用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()));
如果您确定该元素确实来自向量
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- C++错误:"error: int aaa::bbb is protected within this context"
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 关于C++中具有多重继承"this"指针的说明
- 在noexcept 规范中是否允许使用"this"?
- 如何修复"error: ‘_1’ was not declared in this scope"?
- C++调用具有 *this 属性的单个帮助程序函数
- Doees the 'this' 指针参与虚函数的多态行为
- 在 c++ 中正确定义"this"关键字?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- QObject::连接无法将信号连接到*this*对象的插槽
- 析构函数中的"delete this"
- 为什么成员函数内的"this"指针为空?
- 为什么我需要在转换构造函数上引用 this->?
- C++ 结构错误"调用'erase'没有匹配函数
- "this"指针的值在对象的生存期内是否恒定?
- C++ : vector.erase(this)