2

可能重复:
C++ STL:哪种迭代 STL 容器的方法更好?

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

方法一。

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。

4

3 回答 3

2

除非您真的需要使用指针集合,否则只需使用对象集合即可。

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

于 2012-04-29T03:26:52.327 回答
1

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

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

于 2012-04-29T00:59:15.347 回答
1

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

std::vector<boost::shared_ptr<MyType*> > vec
于 2012-04-29T00:59:30.103 回答