Russian Qt Forum
Ноябрь 01, 2024, 07:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление элементов QVector [РЕШЕНО]  (Прочитано 6669 раз)
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());
    }
}
« Последнее редактирование: Сентябрь 28, 2015, 11:50 от Larry » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Сентябрь 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--)
« Последнее редактирование: Сентябрь 28, 2015, 11:45 от Racheengel » Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Larry
Гость
« Ответ #2 : Сентябрь 28, 2015, 11:47 »

Да спасибо. Вы меня опередили Улыбающийся. Пока печатал Вы уже ответили. Спасибо большое.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Сентябрь 28, 2015, 11:50 »

Да не за что Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.