可能重复:
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。
答案 0 :(得分:2)
除非你真的需要使用指针集合,否则只需使用一组对象并完成它。
如果你真的需要一个指针集合,那么你可能想要使用类似Boost pointer container的东西来自动删除指针项。
答案 1 :(得分:1)
我认为1更有效,因为递增比随机访问更有效。随机访问需要检索必要的常量并进行完全添加,而增量通常在硬件中非常有效地实现。
但是,当然,初始化迭代器会花费一些东西,因此迭代器变得更有效的元素数量存在阈值,但我希望这个数字非常低。
答案 2 :(得分:1)
我不知道这两种方法之间是否有任何区别, 但我会用这个:
std::vector<boost::shared_ptr<MyType*> > vec