我有两个对象列表
list<QC> qcB;
list<QC> qcS;
并使用emplace_back()将项目插入其中。因为我意识到插入这些项目花了太长时间,所以我开始搜索我从未使用过的分配器,看看我是否能够让事情变得更快。我在某处读到了我能够获得列表的默认分配器,并提前在其上分配空间,所以我尝试在其中一个列表中分配空间:
qcB.get_allocator().allocate(100000);
我不确定这是否应该起作用,但事实是emplace_back()与两个列表的时间相同,即使其中一个事先正在分配空间。
这应该有效吗?这应该以不同的方式完成,而不是尝试在默认分配器中分配空间吗?我不时清理列表,这可能会影响分配的空间吗?
感谢您的帮助。
答案 0 :(得分:1)
如果您正在谈论标准库list
,它通常是链接列表算法或类似的。
假设您已经完成了良好的分析并且插入确实是问题,并假设您只想进行emplace_back
次呼叫。然后使用vector
,这样您就可以拨打reserve
,并且可以提高性能。
vector<QC> qcB;
qcB.reserve(10000);
但我担心你的实际瓶颈是对象QC
初始化,而这不能是reserve
d。在这种情况下,您可以预先初始化对象(如果有意义初始化对象然后将实际数据放入其中)。
像这样(快速和肮脏的草稿):
vector<QC> qcB;
qcB.resize(10000);
for (int i = 0; i < 10000; ++i) {
qcB[i].populate_object();
}