c++ - 存储动态创建对象的列表/vector 的最佳方式是什么?

标签 c++ dynamic storage

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

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

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

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

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

或者也许有更好的方法,但我不知道。

最佳答案

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

如果您的元素是多态的,您将需要指针。如果您担心清理内存(您应该担心),请考虑使用: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 支持……如果您真的需要速度。

关于c++ - 存储动态创建对象的列表/vector 的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12022560/

相关文章:

c++ - 无法将参数 5 从 'SIZE_T *' 转换为 'size_t *'——为什么?

c++ - 模拟全局热键

iphone - @dynamic 使用的常见情况是什么?

transactions - 我应该为文件使用 Blob 存储还是 Azure VM 存储?

mysql - "Your startup disk is almost full"具有大量可用空间和 mysql 计数不同

c++ - 将程序一的输出作为程序二的输入传递

c++ - 强制 GPGME 中的 GPG 使用 CAST5 以外的密码

属性的 C# 自定义序列化

php - 动态创建的样式表不(总是)更新,导致样式闪烁

c# - 在 C# 中存储可搜索数据的方法