【问题标题】:Shrink QVector to last 10 elements & rearrange one item将 QVector 缩小到最后 10 个元素并重新排列一项
【发布时间】:2019-04-13 14:00:15
【问题描述】:

我正在尝试找到最“有效”的方式,或者至少足够快,让 10k 个项目向量将其缩小到最后 10 个项目并将最后一个选定项目移动到它的末尾。

我最初想使用这种方法进行收缩:

QVector<QModelIndex> newVec(listPrimary.end() - 10, listPrimary.end());

但这不起作用,我不确定如何使用 Qt interators / std 来让它工作......

然后一旦完成,做这个测试

if(newVec.contains(lastItem))
{
    newVec.insert(newVec[vewVec.indexOf(newVec)],newVec.size());
}
else{
    newVec.push_back(lastItem);
}

【问题讨论】:

  • 你也许可以做到auto newVec = listPrimary.mid(listPrimary.size() - 10)

标签: c++ qt qvector


【解决方案1】:

QVector 类有一个 method 可以满足您的需求:

QVector QVector::mid(int pos, int length = ...) const
返回一个子向量,其中包含来自该向量的元素,从位置 pos 开始。如果length 为-1(默认),则包含pos 之后的所有元素;否则包含length 元素(或所有剩余元素,如果少于length 元素)。

所以按照 cmets 中的建议,您可以执行以下操作:

auto newVec = listPrimary.mid(listPrimary.size() - 10);

您不必传递length,因为它的默认值可确保包含pos 之后的所有元素。

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 2016-11-24
    • 1970-01-01
    • 2021-10-03
    • 2021-05-16
    • 2023-01-16
    • 2012-11-08
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多