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

我试图查找operator+的源代码,但是我感觉不多。我已经在a different question中寻求帮助。

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

最佳答案

这是我发现的:

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

因此,它会复制整个列表,并使用operator + =()并返回新列表。对于const方法,它就变得简单明了。

但是我确实有担心:

如果您尝试合并大列表...我个人将使用std::list代替。换句话说,在很多情况下,您不需要保留两个列表(子集)的副本,这就是要处以罚款的地方。
QList a, b, c;
// ... etc.. assumes a & b grow to great sizes
c = a + b;

从上面的示例中,如果您需要使a和b保持不变,那么从子集创建新列表显然是必要的成本。但是,如果在创建列表c之后不需要a和b,那么使用operator +并不是最佳选择。当然-对于很小的列表,这都是微不足道的。

std::list容器是similar to QLinkedList

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

07-28 01:31