可能重复:
C++ STL: Which method of iteration over a STL container is better?清除指针的最佳方法是什么?
在我当前的项目,我有一个指针的STL deque的。我也有一个方法来删除这些指针指向的所有对象。我已经想出了两种不同的方法来实现这一点,但我无法确定哪种方法是首选方法。
方法1.
for (deque<MyType*>::const_iterator it = myDeque.begin(); it != myDeque.end(); ++it)
{
delete *it;
}
myDeque.clear();
方法2
for (int i = 0; i < myDeque.size(); ++i)
{
delete myDeque[i];
}
myDeque.clear();
这两种方法都应该工作,但其中的一个将是优选的?方法1使用STL,但方法2要简单得多。除了代码清洁之外,是否有任何理由说明为什么一种方法应该用于其他方法?在这种情况下使用迭代器是否有优势,尽管创建它的开销很小?
注意:这个问题适用于其他STL序列容器,而不仅仅是Deques。
在这种特殊情况下,使用智能指针将是首选解决方案。 – dasblinkenlight 2012-04-29 00:58:27
如下所述,第一个可能更有效。但是要避免重复调用end()(和size()):for(deque :: const_iterator it = myDeque.begin(),endit = myDeque.end(); it!= endit; ++它) –
2012-04-29 04:53:14
@Anon - 与'delete'调用相比,您在此尝试的任何本地优化都可能是噪声。 – 2012-04-29 06:19:35