vector , Поиск в списке по указателю, корректно ли это?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



vector , Поиск в списке по указателю,... Expand / Collapse
Автор
Сообщение
22.03.2007 17:58
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.08.2008 10:18
Сообщ.: 143, Visits: 1 405
Доброго времени суток! Есть вектор. Вектор хранит указатели на объекты. У объектов есть поле [value]. Это поле используется для сравнения объектов. В некоторый момент, после обработки очередного объекта [A] мне необходимо удалить физически и из вектора объект с значением [value] меньшим чем у объекта [A]. После удаления, мне необходимо продолжить поиск объектов с значением [value] меньшим чем у [A] , и т.д. Т.е. необходимо удалить n-ое количество объектов на основе [value].

После удаления элемента итератор остается некорректным. А все дело в том, что мне необходимо как-то запомнить объект [A]. Напрашивается способ - запоминать указатель хранимый в [A]. И, каждый раз , после удаления элемента восстанавливать итератор на [A] по запомненному значению указателя.

Сортировать не годится. Ресурсы памяти есть главный критерий, а при сортировке возможно выделение вектором дополнительной памяти под свои нужды. Критерий по которому начинают удаляться объекты - нехватка памяти.

Корректно ли это? 

Men in black

Сообщ. #911781
22.03.2007 18:07
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298, Visits: 12 500
обычно в таких случаях (когда по ходу обработки требуется удаление объектов из вектора) пробегают вектор не от начала к концу, а наоборот от конца к началу, тогда указатель на следующий элемент обработки должен оставаться корректным

Удачи,
Владимир
Сообщ. #911782
24.03.2007 19:07
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.08.2008 10:18
Сообщ.: 143, Visits: 1 405
Спасибо! Тока дорвался до инета.

Ты имел в виду указатель который есть значение элемента вектора, или итератор?

Men in black

Сообщ. #911839
31.03.2007 4:48
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 31.03.2007 11:47
Сообщ.: 1, Visits: 3
Здравствуйте, Вячеслав

Не знаю до сих пор ли актуален ваш вопрос, но отвечу.

Если вы используете стандартную библиотеку stl т ее класс vector http://www.cppreference.com/cppvector/index.html то тогда я не вижу проблемы, то есть вы каждый раз будете проверять менше ли значение или нет, если меньше, то итератор it = vector.erase(it) (так как функция возвращает итератор на элемент, следующий за удаленным), и если нет, то просто ++it

Сообщ. #912078
31.03.2007 16:45
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 02.08.2008 10:18
Сообщ.: 143, Visits: 1 405
Здравствуйте, _Natalia_!

Спасибо ! По всему видимо так. 

Это у меня бывает - работаешь, работаешь, смотришь на код и в какой-то момент времени начинают мерещиться "черти".

Men in black

Сообщ. #912083
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 2:45