我发现自己连接QLinkedLists
了很多,所以我开始担心 Qt 的效率QLinkedList::operator+( const QLinkedList<T> &other ) const
我试图查找 的源代码operator+
,但我无法理解它。我已经在另一个问题中寻求帮助。
使用operator+()
运算符连接两个QLinkedList
相同类型的 s 是否有效?实现是否只是让迭代器从第一个列表跳到第二个列表,所以基本上没有调用的惩罚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+ 并不是最佳选择。当然 - 对于非常小的列表,这都是微不足道的。
类似于 QLinkedList的 std::list 容器。
对于 std::list,我会使用splice 之类的东西将两个列表合并在一起。我找不到QLinkedList类似的东西,但就像我已经说过的,我确实倾向于在我自己的代码中使用 STL 容器。