2

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

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

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

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

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

或者也许有更好的方法来做到这一点,我不知道。

4

3 回答 3

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 支持……如果你真的需要速度的话。

于 2012-08-18T22:25:50.140 回答
2

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

于 2012-08-18T22:05:54.563 回答
2

你会std::vector<node>在那种情况下使用。

您提前知道所需物品的类型、尺寸和元素数量。您所描述的内容非常适合向量-您正在处理连续分配。

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

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

于 2012-08-18T22:17:22.610 回答