在阅读了诸如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
的框架函数。
答案 0 :(得分:0)
QList
!= std::list
。 QLinkedList
更像是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());
}
}