可能重複:
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