存储动态创建对象的列表/向量的最佳方法是什么?

时间:2012-08-18 22:03:47

标签: c++ dynamic storage

我一直在想这个问题,今天我终于找到了一个我需要得到正确答案的时刻。

即:我很困惑应该如何存储列表/矢量/?动态创建的对象?

例如:我有这个程序,它将从文件中读取有关连接的数据,然后在此基础上创建node s(其中包含连接信息)对象。

所以问题是:我应该使用std::vector<node>并在for循环中创建临时对象和push_back()它们,还是使用std::vector<node*>push_back()指针动态分配node然后在程序结束时删除它们?

我确实拥有要存储的元素数量。

或许有更好的方法可以做到这一点,我不知道。

3 个答案:

答案 0 :(得分:3)

哦,如果你有一个已知的大小......用你已知的大小分配你的向量(以消除加载过程中调整大小的开销),那么加载与memcpy()一样有效。它只会按预期堆叠您的值。效率高,比指针间接更高效。

如果你的元素是多态的,你需要指针。如果您担心清理内存(应该是这样),请考虑使用:http://www.boost.org/doc/libs/1_50_0/libs/ptr_container/doc/ptr_vector.html

<强> [编辑]

如果一切都是常量,请考虑http://www.boost.org/doc/libs/1_50_0/doc/html/array.html。它就像一个C数组,但没有任何调整大小开销和STL支持......如果你真的需要速度。

答案 1 :(得分:2)

如果您不是绝对需要动态分配,请不要使用它。

答案 2 :(得分:2)

您将在该方案中使用std::vector<node>

您事先知道所需要的类型,大小和元素数量。你所描述的对于矢量来说是完美的 - 你正在处理一个连续的分配。

一般来说,std::list的使用应该非常少见;矢量通常是正确的选择。

另请注意,当您知道大小时,可以使用reserve()在填充之前设置分配大小 - 这可以节省大量重新分配和节点复制。