gpt4 book ai didi

c++ - 指针元素删除 vector

转载 作者:太空狗 更新时间:2023-10-29 21:00:06 24 4
gpt4 key购买 nike

我有一个指针 vector ,我想删除一个条目。删除条目后,我检查 vector 的大小,它没有减少。我应该做额外的事情吗?

printf("size of vector before %d \n", m_obj.size());
for(std::vector<object*>::iterator it = m_obj.begin(); it != m_obj.end(); ++it)
{
if((*it)->m_id == p_id)
{
delete *it;
}
}

printf("size of vector after %d \n", m_obj.size());

最佳答案

您对 delete *it 的调用只会删除 vector 中该条目指向的对象。您不修改 vector 本身。

要同时从 vector 中删除元素,请使用 erase方法:

 delete *it;
it = m_obj.erase(it);

请注意,删除会使当前迭代器无效,因此您可能希望将 erase 调用的返回值分配给您的 it 变量。不过,在循环中删除多个条目时,请注意不要意外跳过元素。返回的迭代器将指向被删除元素 之后 的元素,并将通过 for 循环再次递增。

解决此问题的最简单方法是使用 STL algorithm用于删除元素。如果条目还拥有其指针的所有权,则此方法效果最佳,因此您可能需要考虑使用 smart pointers 的 vector 相反(如建议的 in the comments ),因此您根本不必担心显式调用 delete

关于c++ - 指针元素删除 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com