我发现自己经常连接QLinkedLists
,所以我开始担心Qt的效率QLinkedList::operator+( const QLinkedList<T> &other ) const
我试图查找operator+
的源代码,但我无法理解它。我已在a different question中请求帮助。
使用operator+()
运算符连接两个相同类型的QLinkedList
有效吗?实现是否只有迭代器从第一个列表跳到第二个列表,所以基本上没有惩罚调用operator+()?
答案 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容器。