|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.05.2017, 18:18 | #1 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
Удалить элементы из вектора
У меня есть вектор, написанный мной, из которого надо удалить элементы по некоторому условию. Для этого я делаю цикл от 0 до size() по всем элементам, для каждого элемента проверяю условие и удаляю элемент по его индексу.
Функция удаления устроена так: она просто сдвигает элементы, стоящие справа от index, на одну позицию влево (кстати, надо ли вызывать деструктор элемента при этом?) и декрементирует указатель first_free, указывающий на первый свободный элемент в массиве. Функция size() вычисляется как first_free минус указатель на начало массива. Проблема в том, что цикл удаления проходит по всем элементам исходного массива, но потом размер массива сокращается: Код:
Как можно реализовать удаление или изменить функцию erase() для правильной работы? |
18.05.2017, 19:39 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,493
|
Код:
|
18.05.2017, 19:50 | #3 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
Исправил, но удаление элементов по условию все равно работает не так, как ожидается.
Код:
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
за максимальным элементом вектора С вставить максимальный элемент вектора А, иначе удалить все отрицательные элементы | DIbmKa | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 12.12.2016 20:09 |
Фортран. Удалить из массива нулевые элементы, передвинув на их место следующие элементы без нарушения порядка.. | katya2.5 | Помощь студентам | 0 | 27.12.2013 21:01 |
элементы вектора с нулями | Владюшка | Помощь студентам | 5 | 28.01.2010 14:35 |
элементы вектора | realabs | Общие вопросы C/C++ | 7 | 03.10.2009 17:21 |