QLinkedList运算符+效率

时间:2013-06-21 17:13:40

标签: c++ qt qt4 operators operator-overloading

我发现自己经常连接QLinkedLists,所以我开始担心Qt的效率QLinkedList::operator+( const QLinkedList<T> &other ) const

我试图查找operator+的源代码,但我无法理解它。我已在a different question中请求帮助。

使用operator+()运算符连接两个相同类型的QLinkedList有效吗?实现是否只有迭代器从第一个列表跳到第二个列表,所以基本上没有惩罚调用operator+()?

1 个答案:

答案 0 :(得分:3)

这是我发现的:

template <typename T>
QLinkedList<T> QLinkedList<T>::operator+(const QLinkedList<T> &l) const
{
    QLinkedList<T> n = *this;
    n += l;
    return n;
}

因此它会复制整个列表,使用运算符+ =()并返回新列表。对于const方法,它就像它直接前进一样。

但我确实有疑虑:

如果您正在尝试合并大型列表...我会亲自使用std :: list。换句话说,在许多情况下,您不需要保留两个列表(子集)的副本,这就是惩罚的位置。

QList a, b, c;
// ... etc.. assumes a & b grow to great sizes
c = a + b;

从上面的示例中,如果您需要保持&amp; b,然后显然是从子集创建新列表的必要成本。但如果你不需要&amp; b创建列表c后...然后使用运算符+不是最佳的。当然 - 对于非常小的列表,这一切都是微不足道的。

similar to QLinkedList的std :: list容器。

对于std :: list,我会使用splice to merge two lists together之类的东西。我找不到类似于QLinkedList的任何内容,但就像我已经说过的那样,我倾向于在自己的代码中使用STL容器。