我们应该删除在向量中的指针之前还是之后删除? [英] Should we delete before or after erase for an pointer in the vector?

查看:103
本文介绍了我们应该删除在向量中的指针之前还是之后删除?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我们在 erase 之前或之后删除。我的理解是两个都可以。这是对的吗?

Should we delete before or after erase. My understanding is both are OK. Is it correct?

此外,是否有任何情况下我们不想删除元素而擦除它?我相信一定有,否则, erase 会很乐意承担责任。

In addition, is there any case we won't want to delete the element while erasing it? I believe there must be , otherwise, the erase will be happy to take the responsibility.

std::vector<foo*> bar;
...
for (vector<foo*>::iterator itr = bar.begin(); itr != bar.end(); itr++)
{
   delete (*itr);  //before OR
   bar.erase(itr);
   delete (*itr);  //after???
}


推荐答案

like this;

"itr" must be used like this;

for (vector<foo*>::iterator itr = bar.begin(); itr != bar.end(); )
{
   delete (*itr);
   itr = bar.erase(itr);
}

但是,我宁愿首先删除所有元素,然后清除向量;

However, I'd prefer to first delete all elements, and then clear the vector;

for (vector<foo*>::iterator itr = bar.begin(); itr != bar.end(); ++itr)
   delete (*itr);
bar.clear();

这篇关于我们应该删除在向量中的指针之前还是之后删除?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆