gpt4 book ai didi

c++ - QLinkedList算子+效率

转载 作者:太空狗 更新时间:2023-10-29 21:23:53 26 4
gpt4 key购买 nike

我发现自己在连接 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;
}

因此它复制了整个列表,使用运算符+=() 并返回新列表。对于 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 容器。

关于c++ - QLinkedList算子+效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com