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

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

11.02.2011, 20:37. Показов 7281. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru