|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
||||||||||||||||||||||
'Base' forward list / «Базовый» односвязный список04.09.2018, 04:32. Показов 5264. Ответов 8
Сейчас активно изучаю структуры данных : что это такое, зачем нужно, с чем едят...
Для лучшего понимания, решил сам реализовать некоторые из них. Начал с ( имхо ) самой простой — односвязного списка. «Базовый» в заголовке как бы намекает, что в моей реализации есть только базовый функционал. Если это не так — пишите, я готов исправить. Тему создаю для всеобщего блага : 1) если найдутся какие-то недоработки или семантические ошибки в коде, то, надеюсь, меня поправят ; 2) если всплывет тема с просьбой «памагити список на C++» — вы знаете что делать. Кстати, по поводу кода : повторяюсь, — критика приветствуется, любая. Реализация разбита на 3 файла : forward_list.hpp
forward_list.inl
forward_list.cpp
Короткая документация : Класс Forward_list имеет 1 конструктор — конструктор по умолчанию. ( На самом деле — 2, но сделаем вид, что Forward_list( Forward_list&& ) не существует )Метод front() — возвращает последний добавленный элемент в список. Результат не определен, если список пуст. ( Перегружена для const Forward_list )Метод empty() — возвращает булево значение true, если список пуст или false, если есть хотя бы один элемент.Метод clear() — очищает список ( удаляет все элементы ).Метод push_front() — добавляет элемент в начало списка.Метод pop_front() — извлекает последний добавленный элемент из списка. Результат не определен, если список пуст.Метод remove() — удаляет все элементы со значением, которое было передано аргументом.Метод find() — возвращает кол-во элементов в списке со значением, которое было передано аргументом.Деструктор «очищает» список — удаляет все элементы со списка. ( По сути, вызывает clear() )Пример использования : test.cpp
Добавлено через 10 минут Позже попробую внедрить в это дело итераторы. Тогда можно будет добавить полезных методов, которых, к сожалению, не хватает. Например, семантика метода find() совершенно противоречит моим словам : Кстати, этот же метод заменится на привычный, который возвращает итератор на первый найденный элемент.
0
|
||||||||||||||||||||||
| 04.09.2018, 04:32 | |
|
Ответы с готовыми решениями:
8
Создать динамический шаблонный класс односвязный список - List Сформировать и ввести упорядоченный односвязный список без использования list
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
|
||
| 04.09.2018, 06:19 | ||
|
и не вижу метода типа find(поиск) а так же вставить(Add) по списку методов похоже что реализован стек/очередь
1
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
|
|||
| 04.09.2018, 06:24 | |||
|
пока я писал Mournful Max,сам заметил свои ошибки
nullptr
1
|
|||
| 04.09.2018, 09:21 | |
|
0
|
|
| 04.09.2018, 09:30 | |
|
0
|
|
|
Неэпический
|
||||||||||||||
| 04.09.2018, 10:23 | ||||||||||||||
Сообщение было отмечено Mournful Max как решение
Решение
1
|
||||||||||||||
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
||||||||||||
| 04.09.2018, 10:35 | ||||||||||||
pop_front у вас нет проверки для пустого списка.Ну и там много всего такого. И самое главное: Foward_list как-то уродливо выглядит. Лучше или forward_list или ForwardList.
1
|
||||||||||||
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|||||||||||||||||||||||||||||||||||||
| 05.09.2018, 06:25 [ТС] | |||||||||||||||||||||||||||||||||||||
|
Для начала хочу поблагодарить всех, кто отписался здесь, в этой теме.
constopt Data_t&. Вернуть nullptr не получится ![]() Можно, конечно, бросить исключение или еще чего намудрить, но не в этой реализации. find() ) :find() — нет итераторов. Объясняю : например, хочу вставить такой-то элемент после такого-то. А что если таких-то элементов в списке несколько ? После какого вставлять ? Можно добавить индекс, который будет соответствовать количеству пропущенных элементов и бла-бла-бла А лучше подождать версию с итераторами ![]() ____
Исправил.____ Если я намудриваю, то исправлю..empty() ) перед тем, как изымать что-то ![]() ![]() ____ Вот исправленный вариант : forward_list.hpp
forward_list.inl
forward_list.cpp
Итераторы добавлю немного позже.
0
|
|||||||||||||||||||||||||||||||||||||
| 05.09.2018, 06:25 | |
|
Помогаю со студенческими работами здесь
9
Создать класс «Квартира», в котором список комнат реализовать как односвязный список Заменить массив структур на односвязный список, и на двусвязный список
Задали односвязный линейный список с целыми числами. Создать новый список, который содержит элементы заданного списка в обратном порядке Преобразовать односвязный список в двусвязный список Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|