Что происходит с элементом QVector, когда он удаляется в другом месте?

#qt #pointers #vector

#qt #указатели #вектор

Вопрос:

Мне интересно, что происходит, когда я удаляю элемент QVector?

  1. Удаляется ли он автоматически из QVector?
  2. Должен ли я удалять его вручную?

Кроме того, как я могу узнать индекс итерации итератора?

С наилучшими пожеланиями

Ответ №1:

Если у вас есть QVector<Thing*> и delete один из Thing сохраненных в нем элементов, он не будет автоматически удален из вектора. Вам нужно сделать это самостоятельно.

Насколько я знаю, и из того, что я прочитал в документах, ни у QVector одного итератора нет способа определить, по какому индексу он расположен.

Но если у вас есть ссылка на сам вектор (или, по крайней мере, на его begin() итератор), вы можете использовать:

 int position = iter - v.begin();
  

Комментарии:

1. Итак, я должен перебирать элементы с помощью цикла for или аналогичного. Спасибо за ваш ответ.

2. это один из способов сделать это. зависит от того, что вам нужно на самом деле.

3. Если у вас есть итератор STL iter, вы можете просто использовать iter-v.begin() для вычисления индекса элемента, на который указывает iter.

4. @Christian: спасибо, всегда забывай об этом. Итераторы Qt это тоже поддерживают.