Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 存储动态创建对象的列表/向量的最佳方式是什么?_C++_Dynamic_Storage - Fatal编程技术网

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

C++ 存储动态创建对象的列表/向量的最佳方式是什么?,c++,dynamic,storage,C++,Dynamic,Storage,我一直在想这个问题,今天我终于到了需要正确答案的时刻 也就是说:我不知道如何存储列表/向量/?动态创建对象的数量 例如:我有一个程序,它将从文件中读取有关连接的数据,然后在此基础上创建nodes(其中包含连接信息)对象 所以问题是:我应该使用std::vector并在for循环中创建临时对象并push_back()它们,还是使用std::vector和push_back()动态分配的节点的指针,然后在程序结束时删除它们 我确实有我想要存储的元素的数量 或者可能有更好的方法,我不知道。如果您不完全

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

也就是说:我不知道如何存储列表/向量/?动态创建对象的数量

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

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

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


或者可能有更好的方法,我不知道。

如果您不完全需要动态分配,请不要使用它。

在这种情况下,您将使用
std::vector

您提前知道所需的类型、大小和元素计数。您所描述的内容非常适合于vector--您正在处理一个连续的分配

一般来说,很少使用
std::list
;向量通常是正确的选择


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

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

如果元素是多态的,则需要指针。如果你担心清理内存(你应该),考虑使用:

[编辑]


如果一切都是不变的,也要考虑。它就像一个C数组,但没有任何调整大小的开销和STL支持。。。如果你真的需要速度。

这些节点是多态的吗?(即具有虚拟函数的基类等)((是否有可能根据文件大小计算对象的数量?)好的,不管怎样,我刚刚了解到您有这个数字。@R.MartinhoFernandes它们不是多态的(但如果您回复,请在这一点上加上注释)我知道要存储的元素的数量。如果你不需要多态性(或者有充分的理由使用指针),直接将值存储在向量中。向量本身是动态分配的。您的意思是避免通过
新节点
手动分配
节点
对象吗?