Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Larry от Сентябрь 28, 2015, 11:29



Название: Удаление элементов QVector [РЕШЕНО]
Отправлено: Larry от Сентябрь 28, 2015, 11:29
Добрый день, форумчане.
Возникла проблема с удалением элементов из QVector<QMap<QString, QVariant> >. Пытался удалять через remove, но все равно данные остаются...Подскажите где моя ошибка:

Код:
void filter()
{
    QPointF prev_ptr(0.0f, 0.0f);

    for(int index = 0; index < v_points.count(); index++)
    {
        if(v_points[index].value("LAT").toFloat() == 100.0f || v_points[index].value("LON").toFloat() == 0.0f)
        {
            if(prev_ptr.x() != 100.0f || prev_ptr.x() != 0.0f)
            {
                v_points[index].insert("LAT", prev_ptr.y());
                v_points[index].insert("LON", prev_ptr.x());
            }
            else
            {
                v_points.remove(index);
            }
        }
        else
            prev_ptr = QPointF(v_points[index].value("LON").toFloat(), v_points[index].value("LAT").toFloat());
    }
}


Название: Re: Удаление элементов QVector
Отправлено: Racheengel от Сентябрь 28, 2015, 11:43
После v_points.remove(index); вы перескочите один элемент (следующий за удаленным), т.к. index инкрементируется в строчке с for. Ну т.е. если вы удаляете элемент с index = 5, то после операции remove(5) на место 5-го придет следующий, 6-й. Но поскольку в цикле стоит index++, то он сместится на бывший 7-й элемент, а бывший 6-й будет необработан.

Должно сработать так:
v_points.remove(index);
index--;

Либо организуйте цикл с "конца", типа
for(int index = v_points.count()-1; index >= 0; index--)


Название: Re: Удаление элементов QVector
Отправлено: Larry от Сентябрь 28, 2015, 11:47
Да спасибо. Вы меня опередили :). Пока печатал Вы уже ответили. Спасибо большое.


Название: Re: Удаление элементов QVector
Отправлено: Racheengel от Сентябрь 28, 2015, 11:50
Да не за что :)