清除指针的最佳方法是什么
What is the best way to clear out a Deque of pointers?
可能的重复项:
C++ STL:哪种迭代方法在 STL 容器上更好?
在我目前的项目中,我有一个 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 序列容器,而不仅仅是 Deque。
除非你真的需要使用指针集合,否则只需使用对象集合并完成它。
如果您确实需要指针集合,那么您可能希望使用 Boost 指针容器之类的东西来自动删除指针项。
我会说 1 更有效率,因为增量比随机访问更有效。随机访问需要检索必要的常量并进行完全加法,而增量通常在硬件中非常有效地实现。
但是,当然,初始化迭代器需要一些成本,因此迭代器变得更高效的元素数量有一个阈值,但我希望这个数字会很低。
我不知道
这两种方法之间是否有任何区别,但我会使用这个:
std::vector<boost::shared_ptr<MyType*> > vec
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 通过JNI传递数据数组的最快方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在C++中包含原型文件的正确方法是什么?
- 在 OpenCV C++ 中估计基本矩阵之前对相应点进行归一化的正确方法是什么?
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 将一系列整数放入类的最佳方法是什么?
- 从长整整转换为uint64_t的推荐方法是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?