![]() |
|
Модераторы: bsa |
![]()
|
|
| AmXSe |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 18.3.2013 Репутация: нет Всего: нет |
Доброе время суток!
Есть список списков. При удалении и последующей вставке элементов в дочерние списки происходят непонятные вещи: указатель на конец дочернего списка неведомым образом становится "сам по себе" и теряется, посему вставка просто-напросто не происходит. Добавление элемента в список:
Удаление:
Проблема вылазит здесь:
При выполнении вывод примерно следующий:
Тогда как для взятого случая ожидается вот что:
Как быть? Помогите, пожалуйста, разрешить ситуацию. P.S.: В аттаче полный код Присоединённый файл ( Кол-во скачиваний: 4 )
krs_proj.7z 949,59 Kb |
||||||||||
|
|||||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| kolesnle |
|
|||
![]() Упертый сишник ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 22.3.2013 Репутация: нет Всего: нет |
+ Кажется по теме, у каждого контейнера должны быть итераторы begin(), end()
Если надумаешь, вот реализация итератора:
А также функция size(). Я думаю это упростит работу, и указатели теряться не будут. Это сообщение отредактировал(а) kolesnle - 22.4.2013, 00:44 |
|||
|
||||
| AmXSe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 18.3.2013 Репутация: нет Всего: нет |
mes, а как иначе здесь? Вроде всё просто: обновляем указатель на соседа у последнего элемента, затем обновляем ссылку на последний элемент в самом списке. Если конец списка не установлен, то полагаем что список пуст и так же обновляем указатель на голову.
kolesnle, в данном конкретном случае вроде не понадобится - указанный баг это единственное что отделяет меня от победы над задачей. Но на будущее учту, спасибо! Это сообщение отредактировал(а) AmXSe - 22.4.2013, 01:53 |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну а про следущую строчку зачем умолчали? Добавлено через 6 минут и 38 секунд
тут тоже сомнительно.. может стотит вначале самому уделить внимание и написать логику в более читаемом виде ? |
||||
|
|||||
| kolesnle |
|
|||
![]() Упертый сишник ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 22.3.2013 Репутация: нет Всего: нет |
+ Зачем #pragma once, если ты уже написал #ifdef...#define..#endif?
Добавлено через 14 минут и 47 секунд + Не используй NULL, он определен, как
Используй nullptr. |
|||
|
||||
| kolesnle |
|
|||
![]() Упертый сишник ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 22.3.2013 Репутация: нет Всего: нет |
+ Используй быструю сортировку
Добавлено @ 09:43 Определи begin, end, size хотя бы так
А лучше используй итераторы. Добавлено @ 09:50 [/code] Это сообщение отредактировал(а) kolesnle - 22.4.2013, 21:13 |
|||
|
||||
| kolesnle |
|
|||
![]() Упертый сишник ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 22.3.2013 Репутация: нет Всего: нет |
+ секцию private: обычно располагают в конце, public: в начале, а protected: в середине
|
|||
|
||||
| AmXSe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 18.3.2013 Репутация: нет Всего: нет |
mes,
kolesnle, спасибо за ответы. Рефакторинг проделаю. Как оказалось, проблема возникала при удалении последнего элемента списка - криво обновлялся указатель на хвост. Переписал полностью. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |