Russian Qt Forum

Qt => Вопросы новичков => Тема начата: AlekseyDL от Август 14, 2013, 22:52



Название: Почему QList удаляет только половину списка?
Отправлено: AlekseyDL от Август 14, 2013, 22:52
Добрый вечер.
Столкнулся со странной особенностью QList: при удалении элементов списка (с помощью void removeAt ( int i )), количетво элементов уменьшается только до 1/2 от начального размера списка.
Приведу пример:
Код:
           QList <int> p_list;
for (int i = 0; i < 12; i ++)
{
p_list.insert(i, i * i);
}

int size;
p_list.removeAt(0);
size = p_list.size();
p_list.removeAt(1);
size = p_list.size();
p_list.removeAt(2);
size = p_list.size();
p_list.removeAt(3);
size = p_list.size();
p_list.removeAt(4);
size = p_list.size();
p_list.removeAt(5);
size = p_list.size();
p_list.removeAt(6);
size = p_list.size();
p_list.removeAt(7);
size = p_list.size();
-здесь, после строки "p_list.removeAt(5);" size остается равным 6.
Поясните, пожалуйста, как обойти эту особенность: после каждого удаления элемента вплоть до последнего, размер должен уменьшаться на 1.

***

Отправил тему и нашел ответ ).
У нас же нет индекса больше 5 после 6 удалений.


Название: Re: Почему QList удаляет только половину списка?
Отправлено: ecspertiza от Август 15, 2013, 08:31
Потому что, после выполнения

Код:
p_list.removeAt(0);

индексы смещаются, то есть что бы удалить 6ть элементов выполни 6ть раз  p_list.removeAt(0).