我一直在想这个问题,今天我终于找到了一个我需要得到正确答案的时刻。
即:我很困惑应该如何存储列表/矢量/?动态创建的对象?
例如:我有这个程序,它将从文件中读取有关连接的数据,然后在此基础上创建node
s(其中包含连接信息)对象。
所以问题是:我应该使用std::vector<node>
并在for
循环中创建临时对象和push_back()
它们,还是使用std::vector<node*>
和push_back()
指针动态分配node
然后在程序结束时删除它们?
我确实拥有要存储的元素数量。
或许有更好的方法可以做到这一点,我不知道。
答案 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()
在填充之前设置分配大小 - 这可以节省大量重新分配和节点复制。