В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

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

11.02.2011, 20:37. Показов 7671. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru