QVector中delete后使用 erase
时间: 2024-04-24 07:27:34 浏览: 144
回答: 在引用\[1\]中的代码清单中,使用了`std::find`函数来查找`vecId`中是否存在值为2042的元素,并将返回的迭代器赋值给`iteVec`。然后通过判断`iteVec`是否等于`vecId.end()`来确定是否找到了该元素。如果找到了,就使用`vecId.erase(iteVec)`来删除该元素。\[1\]
然而,在引用\[2\]中的错误信息中指出,在QVector中使用`erase`函数时,传入的迭代器参数`aend`是无效的。这可能是由于迭代器已经失效或者指向了一个无效的位置。因此,需要确保在调用`erase`函数之前,迭代器仍然有效。\[2\]
在引用\[3\]中的示例代码中,为了解决这个问题,使用了重新遍历的方法。首先使用`entities.at(i)`来判断`entities`中的第`i`个元素是否存活。如果不存活,则重新使用迭代器遍历`entities`,并使用`entities.erase(iter)`来删除该元素。需要注意的是,这里使用了`entities.begin()`来初始化迭代器`iter`,并通过`iter++`来逐个移动迭代器的位置,直到找到需要删除的元素。\[3\]
总结来说,如果在QVector中删除元素后再使用`erase`函数,需要确保传入的迭代器仍然有效。如果迭代器失效,可以考虑重新遍历容器并使用迭代器来删除元素。
#### 引用[.reference_title]
- *1* [4.5 案例9 使用QVector处理数组](https://blog.csdn.net/weixin_35315373/article/details/112964727)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [有关ASSERT failure in QVector::erase: “The specified iterator argument ‘aend‘ is invalid“问题的...](https://blog.csdn.net/qq_32162235/article/details/107137709)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [C++ vector 的 erase() 仍引发崩溃](https://blog.csdn.net/cjz2005/article/details/119832043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文