如何 truncate/resize QList<> 正确
How to truncate/resize a QList<> properly
在阅读了Why doesn't QList have a resize() method?等一些问题后,我想知道以下问题。
通常,在 STL 代码中,我可以用这样的东西来限制 results
处理的大小:
std::list<int> results = something()
results.resize(std::min(result.size(), 5000));
现在我有一个带有 QList 的 Qt 项目:
QList<int> results = something()
while(results.size() > 5000) {
results.removeLast();
}
expensiveOperation(results);
这真的是使用 Qt 容器 和 QList
的最佳方式吗?
原因是我需要最终将其传递给期望 QList
.
的框架函数
QList
!=std::list
。 QLinkedList
更像是 std。版本。对于大多数操作,QVector
优于 QList
作为 Qt 中使用的容器类型。阅读 https://marcmutz.wordpress.com/effective-qt/containers/ 以获得完整的解释。
如果你因为某种原因被 QList
困住了......那么是的...... :( 可能 更快地获得一个新列表 QList::mid()
。而且总是 QList::toVector()
或 toStdList()
。:)
怎么样:
template<typename T>
static void truncate(QList<T> &list, int length) {
if (0 <= length && length < list.length()) {
list.erase(list.begin() + length, list.end());
}
}
在阅读了Why doesn't QList have a resize() method?等一些问题后,我想知道以下问题。
通常,在 STL 代码中,我可以用这样的东西来限制 results
处理的大小:
std::list<int> results = something()
results.resize(std::min(result.size(), 5000));
现在我有一个带有 QList 的 Qt 项目:
QList<int> results = something()
while(results.size() > 5000) {
results.removeLast();
}
expensiveOperation(results);
这真的是使用 Qt 容器 和 QList
的最佳方式吗?
原因是我需要最终将其传递给期望 QList
.
QList
!=std::list
。 QLinkedList
更像是 std。版本。对于大多数操作,QVector
优于 QList
作为 Qt 中使用的容器类型。阅读 https://marcmutz.wordpress.com/effective-qt/containers/ 以获得完整的解释。
如果你因为某种原因被 QList
困住了......那么是的...... :( 可能 更快地获得一个新列表 QList::mid()
。而且总是 QList::toVector()
或 toStdList()
。:)
怎么样:
template<typename T>
static void truncate(QList<T> &list, int length) {
if (0 <= length && length < list.length()) {
list.erase(list.begin() + length, list.end());
}
}