| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Удалить повторяющиеся элементы списка |
| Автор: Aoizora 25.2.2017, 22:22 | ||
Есть односвязный список, нужно удалить из него все элементы, которые встречаются более одного раза. Расстояние между повторяющимися элементами любое. Для решения задачи я использовал хеш-таблицу:
Интересующая процедура - remove_dups. При ее вызове происходит сегфолт. Так как у меня на старый ноут не устанавливается студия с отладчиком и я собираю программу в сигвине, отлаживать тут тяжело, поэтому я пытаюсь воспользоваться своим хрустальным шаром и найти ошибку глазами, но не получается. Помогите определить, где используется нулевой указатель или что-то еще вредное. |
| Автор: volatile 26.2.2017, 00:41 | ||
| разыменовывать .end() нельзя. если не найдено, find возращает .end() надо как-то так:
ps: больше ничего не смотрел |
| Автор: azesmcar 26.2.2017, 18:57 |
| плюс к сказанному: head пропускается при поиске дубликатов. итерация начинается со второго элемента, а также для пустого списка будет segfault по той же самой причине. Добавлено через 2 минуты и 25 секунд также можно избежать повторного поиска в insert и find. функция std::set<T>::insert возвращает в паре флаг обозначающий успех вставки. Можно сразу пытаться вставить в set и в случае возвращения false считать элемент обработанным. |