Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Реализовать двунаправленный список в духе списка из STL

11.02.2011, 20:37. Показов 7593. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Все-таки видимо у меня всегда останутся с этим проблемы.
Само определение скидывать не буду, я пытаюсь сделать, что-то вроде STL-ного списка.
Спросить хочу только одно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    void push_back(const T& el)
    {
        Node* tmp=new Node(el);
        if(empty())
        {
            head=tmp;
            tail=tmp;
            ++sz;
            return;
        }
        tail->next=tmp;
        tail=tmp;
        ++sz;
    }
После этого список можно прогонять только в одну сторону. С головы в хвост. В хвосте же только последний элемент и в prev ничего нет. В чем мб проблема?
Хотя вообще как я понял это для однонаправленного только катит... А вот как сделать для двунаправленного - второй день догнать не могу.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2011, 20:37
Ответы с готовыми решениями:

Двунаправленный список (добавление/удаление элементов в голову, просмотр списка, реализовать дублирование элементов с заданным значением)
Здравствуйте! Помогите написать программу, обеспечивающую работу с двунаправленным нециклическим списком: добавление/удаление элементов в...

Двунаправленный список. Отрицательные элементы списка перенести в начало списка
Помогите написать программу. Дан двунаправленный список L, элементы которого являются целыми числами. Отрицательные элементы списка...

Двунаправленный список - реализовать работу с данными о ПК
Помогите привести код в нормальный вид. Не работает из-за ошибок. Так-же не откажусь от любой помощи по вопросам отмеченными...

44
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
16.04.2011, 09:37  [ТС]
Студворк — интернет-сервис помощи студентам
bigredcat, Про наследование.

Итераторы в list MSVS.

C++
1
2
3
    template <bool _SECURE_VALIDATION>
    class _Iterator
        : public _Const_iterator<_SECURE_VALIDATION>
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
16.04.2011, 11:31
ForEveR, да, это так. Но в отличае от вашей реализации, там наследование имеет смысл. В MSVC в производном классе итератора поле для хранения указателя на узел не определяется заново (по крайней мере то, что я видел в STL VC2008). Это поле уже есть в базовом классе. Зачем его еще в производный добавлять?
Я хочу сказать, что поскольку в вашей реализации все поля переопределяются в производном классе заново, то и смысл наследования теряется. Это при том еще, что базовый класс практически ничего больше, в добавление к этим указателям, не содержит, кроме операторов, которые все-равно требуется переопределить в производном.
Кроме того не совсем понятно зачем хранить еще два указателя, если предыдущий и следующий могут быть получены из текущего. Спасти от неопределенного состояния итератора в случае удаления текущего узла они все-равно в общем случае не могут, так как могут быть удалены и соседние узлы. Так что одного указателя в базовом классе вполне достаточно.
0
 Аватар для zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
24.08.2016, 18:07
ещё можно добавить
C++
1
2
3
List(std::initializer_list<value_type> l) : List(l.begin(), l.end())
{
}
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
24.08.2016, 18:09
Цитата Сообщение от zarko97 Посмотреть сообщение
ещё можно добавить
Особенно, если учесть, что тема создана до выхода C++11
0
 Аватар для zarko97
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
24.08.2016, 18:18
ну на дату особо не смотрю...
+недостает

C++
1
2
3
4
5
6
7
8
9
10
11
template <class T>
inline bool operator==(const list<T> &x, const list<T> &y)
{
    return x.size() == y.size() && std::equal(x.begin(), x.end(), y.begin());
}
 
template <class T>
inline bool operator< (const list<T> &x, const list<T> &y)
{
    return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
}
и тд.

Добавлено через 1 минуту
+ неплохо перегрузить >> и <<
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2016, 18:18

Реализовать пользовательский класс "Двунаправленный список"; реализовать добавление и удаление элементов
Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать двунаправленный список. Удалить К элементов с...

Двунаправленный список: элементы добавляются и просматриваются с конца, а удаляются с начала списка
Помогите пожалуйста. Реализовать программу с динамической структурой данных – двунаправленный список: элементы добавляются и...

STL: реализовать кольцевой упорядоченный двусвязный список
Добрый вечер всем кто открыл эту вкладку! Надо реализовать кольцевой упорядоченный двозвязний список на STL + некоторые функции работы с...

Реализовать удаление элемента из пользовательского класса "Двунаправленный список"
Программа для работы с двунаправленным списком. Пользователь вводит список с клавиатуры, программа должна выводить его в обоих...

реализовать без применения STL, абстрактные типы данных (по одной программе для каждого из типов) список, стек
Задача: реализовать без применения STL, абстрактные типы данных (по одной программе для каждого из типов) список, стек Для списка: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru