如何实现std :: list中的insert操作?我试过阅读源代码,但对我来说这是不可读的。如果我将它与std :: list.insert()进行比较,我在列表中执行insert操作的速度太慢了。但是,问题出在哪里?我没有发布完整的源代码,因为它太长了。
if (__size == 0 && index == 0)
{
installFirstNode(arr[0]);
node * tnode;
for (register msize i=1; i<alen; ++i)
{
tnode = allocNode();
tnode->value = arr[i];
tail->link = tnode;
tail = tnode;
}
return;
}
这是我的插入函数的小片段。我有一个想法,std :: list使用内存池作为节点。但是,如果它使用内存池,它会更快......(不仅提升30%)。
我使用GCC 4.8
void installFirstNode(const T & val)
{
node * n = allocNode();
n->value = val;
head = tail = n;
}
node * allocNode()
{
node * newNode = (node*)_allocator.alloc(sizeof(node));
callCtors(newNode);
newNode->link = nullptr;
return newNode;
}
template <class T>
void callCtors(T * base, msize size=1)
{
new (base) T [size];
}
_allocator.alloc(sizeof(node)) - &gt;它是malloc()的简单包装。
alen是简单的长变量