清除指针Deque的最佳方法是什么?

时间:2012-04-29 00:50:20

标签: c++ stl deque

  

可能重复:
  C++ STL: Which method of iteration over a STL container is better?

在我目前的项目中,我有一个STL Deque of pointers。我还有一个方法,用于删除那些指针指向的所有对象。我想出了两种不同的方法来实现这一点,但我无法确定哪种方法是首选方法。

方法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。

3 个答案:

答案 0 :(得分:2)

除非你真的需要使用指针集合,否则只需使用一组对象并完成它。

如果你真的需要一个指针集合,那么你可能想要使用类似Boost pointer container的东西来自动删除指针项。

答案 1 :(得分:1)

我认为1更有效,因为递增比随机访问更有效。随机访问需要检索必要的常量并进行完全添加,而增量通常在硬件中非常有效地实现。

但是,当然,初始化迭代器会花费一些东西,因此迭代器变得更有效的元素数量存在阈值,但我希望这个数字非常低。

答案 2 :(得分:1)

我不知道这两种方法之间是否有任何区别, 但我会用这个:

std::vector<boost::shared_ptr<MyType*> > vec