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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Удаление из середины вектора  (Прочитано 2877 раз)
Zizilk
Гость
« : Август 05, 2010, 18:57 »

Вопрос такого плана.
Имеется вектор объектов и в нём N переменных(объектов).
К каждому из которых можем обратится по порядковому номеру(первый ноль).

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

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 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;
}
 
« Последнее редактирование: Август 05, 2010, 19:08 от Igors » Записан
Zizilk
Гость
« Ответ #2 : Август 05, 2010, 20:39 »

Спасибо, а ещё вопрос, нормально ли в классе задать вектор объектов этого же класса(вернее указателей на них?) или лучше глобально?(доступ к ней будет нужен из многих классов. большенство ф-ций будут с ним работать, а не только брать значения?)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Август 06, 2010, 11:45 »

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

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

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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