如何 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::listQLinkedList 更像是 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());
    }
}