如何正确截断/调整QList <>的大小

时间:2019-11-21 09:47:00

标签: qt size limit qlist

在阅读了诸如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容器 a QList的最佳方法吗? 原因是我最终需要将此传递给期望QList的框架函数。

2 个答案:

答案 0 :(得分:0)

QList!= std::listQLinkedList更像是std。版。对于大多数操作,QVector优于QList作为Qt中使用的容器类型。阅读https://marcmutz.wordpress.com/effective-qt/containers/以获得完整说明。

如果由于某种原因而坚持使用QList ...那么,是的... :( 可能更快,用QList::mid()获得新列表。而且总是有QList::toVector()toStdList()。:)

答案 1 :(得分:0)

怎么样:

template<typename T>
static void truncate(QList<T> &list, int length) {
    if (0 <= length && length < list.length()) {
        list.erase(list.begin() + length, list.end());
    }
}