Russian Qt Forum

Программирование => С/C++ => Тема начата: Zizilk от Август 05, 2010, 18:57



Название: Удаление из середины вектора
Отправлено: Zizilk от Август 05, 2010, 18:57
Вопрос такого плана.
Имеется вектор объектов и в нём N переменных(объектов).
К каждому из которых можем обратится по порядковому номеру(первый ноль).

А теперь представьте что из середины удаляем одну переменную(объект), нумерация сохранится или нет у переменных следующих за удалёной? И если не сохранится, то как быть?


Название: Re: Удаление из середины вектора
Отправлено: Igors от Август 05, 2010, 19:06
Нет, не сохранится, индексы уплывут начиная с удаленного элемента. Но прогону по вектору удаление не мешает. Можно напр так
Код
C++ (Qt)
for (MyVector::iterator it = vec.begin(); it != vec.end(); ) {
       .....
if (doDelete)
 vec.erase(it++);
else
 ++it;
}
 
Или по-народному
Код
C++ (Qt)
int = 0;
while (i < vec.size()) {
 ...
 if (doDelete)
    vec.erase(vec.begin() + i);
 else
    ++i;
}
 


Название: Re: Удаление из середины вектора
Отправлено: Zizilk от Август 05, 2010, 20:39
Спасибо, а ещё вопрос, нормально ли в классе задать вектор объектов этого же класса(вернее указателей на них?) или лучше глобально?(доступ к ней будет нужен из многих классов. большенство ф-ций будут с ним работать, а не только брать значения?)


Название: Re: Удаление из середины вектора
Отправлено: Igors от Август 06, 2010, 11:45
Спасибо, а ещё вопрос, нормально ли в классе задать вектор объектов этого же класса(вернее указателей на них?) или лучше глобально?(доступ к ней будет нужен из многих классов. большенство ф-ций будут с ним работать, а не только брать значения?)
Обычно это static член (та же глобальная переменная)

Код
C++ (Qt)
class MyClass {
public:
...
static QVector<MyClass *> theVector;
};
 
// использлвание
MyClass::theVeсtor.push_back(new MyClass());