Сократите QVector до последних 10 элементов и переставьте один элемент - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь найти наиболее «эффективный» способ или, по крайней мере, достаточно быстро для вектора из 10 тыс. Элементов, чтобы уменьшить его до последних 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);
}

1 Ответ

0 голосов
/ 10 ноября 2018

Класс QVector имеет метод , который делает то, что вы хотите:

QVector QVector :: mid (int pos, int length = ...) const
Возвращает субвектор, который содержит элементы этого вектора, начиная с позиции pos. Если length равно -1 (по умолчанию), все элементы после pos включены; в противном случае включаются элементы length (или все остальные элементы, если количество элементов меньше length).

Итак, как предлагается в комментариях, вы можете сделать что-то вроде этого:

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

Вам не нужно передавать length, поскольку его значение по умолчанию обеспечивает включение всех элементов после pos.

...