Тёмный

Реализация односвязного списка c++ Часть 1 | Урок  

#SimpleCode
Подписаться 368 тыс.
Просмотров 353 тыс.
50% 1

В этом уроке мы начнём писать собственный односвязный список на языке программирования C++ с подробными пояснениями.
Односвязный список | Динамические структуры данных #1
Теория goo.gl/E5KrVi
Определение методов вне класса. Вынести функцию в из класса. Вынести описание метода вне класса. #89
goo.gl/gqh536
Шаблоны классов с++ примеры. Обобщенные классы. Изучение С++ для начинающих. Урок #126
goo.gl/U99h9t
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=)
🔴🔴🔴 www.donationalerts.ru/r/simple...
или тут
🔴🔴🔴 / simplecode
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit

Опубликовано:

 

16 янв 2018

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 356   
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
*Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*
@borisshabanov6702
@borisshabanov6702 6 лет назад
Зачем создавать шаблонный Node, когда он и так объявлен в шаблонном List. Тип T для всех будет один, разве нет?
@zaramar8250
@zaramar8250 6 лет назад
нет
@borisshabanov6702
@borisshabanov6702 6 лет назад
Миша Якименко я проверил, лишний шаблон не нужен
@masasikisimoto26
@masasikisimoto26 5 лет назад
@@borisshabanov6702 у меня тоже так сработало, не пойму смысла Node делать шаблонным. В code::blocks вообще ошибку выдает.
@kosmoz8131
@kosmoz8131 2 года назад
Более того компилятор не запускает программу , так как не может понять параметр T, я пишу в code blocks, может в studio по другому
@viktoriiavolkova756
@viktoriiavolkova756 6 лет назад
Спасибо вам большое. Я сама студентка и нам сказали лабы писать на С++, теперь вся група смотрит вас и учиться. Вы хорошо рассказываете, понятно. Спасибо.
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
Пожалуйста!
@user-le7wn3tb3c
@user-le7wn3tb3c 6 лет назад
+
@user-mm8hc5uu1e
@user-mm8hc5uu1e 4 года назад
@@SimpleCodeIT Сергей, подскажите, пожалуйста, в каком уроке появился синтаксис типа "current->pnext" или "current-> data" 20:34
@shoorikefimov6759
@shoorikefimov6759 4 года назад
@@user-mm8hc5uu1e Урок про указатель this №94. Коротко: с прототипа класса к полям обращаемся через точку, с указателя через -> Node current; current.pNext; Node *current; current->pNext;
@brennydit
@brennydit 3 месяца назад
храни тебя господь, долгих тебе лет жизни, спасибо за огромнейший труд, на твоем канале довольно давно сижу, всю процедурку вместе с тобой прошел, почти все ООП, понял как работает односвязный список, спасибо тебе огромное, настоящий учитель)))))))))
@SeshAlex
@SeshAlex 6 лет назад
Спасибо за урок! Для учащихся - в процессе урока пишите код, на не понятных моментах делайте паузы и перебирайте код отладчиком или глазами, так легче мозг принимает информацию.
@user-ut7tj6bp4t
@user-ut7tj6bp4t 4 года назад
Очень полезный урок. Ребят, если вы переписывайте код, то не забывайте его комментировать во-первых для того, чтобы самому лучше понять как и что работает, а во-вторых, чтобы при просмотре вашего кода, например через месяц, вы не путались в огромном количестве строк кода. А также не забывайте комментировать и ставить лайки под такими видео, чтобы увеличить их популярность.
@Son-of-the-God---
@Son-of-the-God--- 2 года назад
Памятник при жизни Сергею поставлю!!! Спасибо вам Сергей за ваши труды, здоровья вам и вашим близким, долгих лет жизни, и хороших людей рядом!!!
@stephandolskii7964
@stephandolskii7964 2 года назад
Я не знаю, как бы я изучил ЭТО без таких прекрасных объяснений. Это шедевр
@maxamly
@maxamly 5 лет назад
Господи это реально лучший канал по си плюсам, Чувак ты лучший❤️❤️❤️
@observer7742
@observer7742 Год назад
Огромное спасибо! Отличные, понятные, содержательные уроки. Очень полезно!
@user-kp9hh9ox1i
@user-kp9hh9ox1i 6 лет назад
классный урок, спасибо Сергей!
@user-os5ee2fg9d
@user-os5ee2fg9d 5 лет назад
Спасибо за отличный урок!
@andrewbistroff1199
@andrewbistroff1199 6 лет назад
Спасибо за урок!
@akkh6971
@akkh6971 Год назад
Не описать словами чувство удовлетворения от понимания устройства односвязного списка после ваших разъяснений! Спасибо большое!
@kaynsolo
@kaynsolo 6 лет назад
Very available explained!Like!
@segars9604
@segars9604 6 месяцев назад
Спасибо за бесценный труд!)
@user-bc4vi6hl2f
@user-bc4vi6hl2f 6 лет назад
Спасибо за урок
@nap0le0nb0naparte7
@nap0le0nb0naparte7 6 лет назад
Спасибо большое Сергей за реализацию списка!
@TheWladberlin
@TheWladberlin 4 года назад
Спасибо большое за урок!
@pavelios3577
@pavelios3577 5 лет назад
Спасибо за урок.
@user-nw5iw5ew9z
@user-nw5iw5ew9z 2 года назад
Спасибо за столь не простой урок. По уровню сложности я бы его оценил как урок про конструкторор копирования. Однако, пересматривая урок по несколько раз с каждым разом, понимание становится лучше и лучше.
@RemboZSU
@RemboZSU 6 лет назад
Спасибо большое за урок. Преподы не могут так объяснить как вы!)
@C2H5OHH
@C2H5OHH 2 года назад
Thank you for the lesson!
@neverhoodJK
@neverhoodJK 6 лет назад
ну ты дал, Сергей!:)) загрузил так загрузил:) самое удивительное, что я все понял, а я новичок в этом) Спасибо! и присоединяюсь про бабосы с первой зп. Это заслуженно 100%.
@user-ic3kv9oz3g
@user-ic3kv9oz3g 2 года назад
Вообще не знаю, как бы я понимал программирование без Сергея. Спасибо, друг.
@KurpatovInstagram
@KurpatovInstagram 6 лет назад
Спасибо!
@grintea4163
@grintea4163 5 лет назад
Большое спасибо за урок
@vladalu9794
@vladalu9794 6 лет назад
спасибо большое, очень понравился урок, продолжай в том же духе!!!
@user-yw9bq1pt9v
@user-yw9bq1pt9v 11 месяцев назад
Огромное спасибо !!!!
@user-rv9ss5ce7z
@user-rv9ss5ce7z 6 лет назад
Серега спасибо!
@tyomka4265
@tyomka4265 6 лет назад
очень интересно
@sofafrom1047
@sofafrom1047 Год назад
Это просто нереально полезный для меня урок
@jangiryanarsen4952
@jangiryanarsen4952 6 лет назад
Просто безумно интересно, продолжай в таком же духе Сергей!!! От меня лайк.
@alexkuyrib2580
@alexkuyrib2580 3 года назад
большое спасибо за урок!!! Удачи Вам) а каналу 500К подписчиков!!!
@shutup-kc5ud
@shutup-kc5ud 3 года назад
Благодаря вам сдала лабу по программе, большое спасибо ~
@armm6437
@armm6437 2 года назад
Мощно)2 ой день уже смотрю)
@user-pd4gt9zz9c
@user-pd4gt9zz9c 6 лет назад
В очередной раз огромная благодарность Вам за доходчивое разъяснение и внятный, толковый пример.
@alexshyshkov3919
@alexshyshkov3919 6 лет назад
видео класс, жду уроков про очередь и бинарное дерево)
@user-qb8um2ec4c
@user-qb8um2ec4c 4 года назад
этот чувак просто гений у него есть настоящий дар учителя потрясающий контент!
@miroslavklyukovsky683
@miroslavklyukovsky683 2 года назад
Спасибо!!!
@user-pv8ir9py9b
@user-pv8ir9py9b 10 месяцев назад
Отличный курс!!!!!!!!!!!!!!!!!
@Lol-nz7fn
@Lol-nz7fn Год назад
Блин, ну вроде бы понял как это всё работает, спасибо Сергею за такой труд)
@user-gw4uc3gs7z
@user-gw4uc3gs7z 11 месяцев назад
безмерная благодарность Тебе
@user-nd4sl1lp9b
@user-nd4sl1lp9b Год назад
Спасибо за разъяснение.Всё толково и понятно!❤
@Hikikomori123
@Hikikomori123 7 месяцев назад
чего добился за эти 5 мес?
@user-nd4sl1lp9b
@user-nd4sl1lp9b 7 месяцев назад
​@@Hikikomori123всё работает хорошо.Список у меня из структур.Хотел что бы происходила сортировка по какой либо записи структуры,но пока не знаю как используя стандартные средства среды это сделать?
@billlanc9461
@billlanc9461 2 года назад
Пришел из курса по C#. Тема Рекурсия. Плюсы таки сложнее шарпа, но смотреть интересно. Автор канала крут!
@araikrasoyan702
@araikrasoyan702 5 лет назад
Спасибо.
@paulsound8430
@paulsound8430 2 года назад
Разобрал я этот пример и подумал про себя а умно все это сделано=)
@borisshalabanov4620
@borisshalabanov4620 6 лет назад
спасибо
@mykhailomorhal2181
@mykhailomorhal2181 6 лет назад
Обещаю часть своей первой зарплаты (от работы програмиста) отправить вам на поддержку канала!
@user-ku8jc7lt9b
@user-ku8jc7lt9b 6 лет назад
Присоединяюсь, отличная идея!
@llllNEOllllchannel
@llllNEOllllchannel 6 лет назад
peace да ball
@iii-mk7no
@iii-mk7no 4 года назад
@Artur Golovenko Тебе так хочется верить. Я отучился на программиста, за 5 лет обучения я знаю меньше чем с уроков ютуба(т.к там преподу пофигу знаешь ты или нет. Он приходит сидит там мямлет что то себе под нос, читая слайд шоу. На ютубе ты можешь выбрать канал, а препода в универе нет.При обучении я просто ненавидил с++.) Конечно нужно еще почитать кое какой инфы и книг, много гуглить, много проб и ошибок. Этот диплом, что я получил мне абсолютно никакой пользы не принес. Работаю не по специальности. Данная работа мне приносит, для моего опыта и возраста колоссальный доход ,какие то цифры я приводить не буду, дабы тут не хвастаться не перед кем. Но у данной моей работы есть огромные минусы. Она очень тяжелая, много грязи, и еще связана с командировками(причем бывают и по пол года). Поэтому я решил вернуться к истокам с чего и начинал, к программированию. Смотря курс Сергея(ему огромное отдельное спасибо!!!!). Я постиг много во, теперь действительно могу что то написать. Читаю книги Бьерна Страуструппа, все свое свободное время просто вкладываю в обучение. Учу параллельно английский. Главное вера в себя, хорошая усидчивость, голова на плечах и руки не из одного места:) Сергею еще раз большое спасибо, из всех просмотренных мной каналов это самый лучший. Он действительно хорошо все объясняет, как говорят, нам все разжевал - осталось только в рот положить. По сравнению с тем же Дударем(давайте создадим переменную, а хотя можно и не создавать) - его смотреть это когда все знаешь.
@avocadoman6038
@avocadoman6038 4 года назад
@@iii-mk7no Ну, как бы суть современного высшего образования в том, что тебе указывают нужное направление, а дальше ты сам в интернете и библиотеках учишься.
@mykhailomorhal2181
@mykhailomorhal2181 4 года назад
@@jojomajo 1) Російська мова не є моя рідна 2) Гроші я переказав, можеш спитати у автора 3) Зараз працюю в Європі айтішніком :) За допомогою цього вже всю Європу об'їздив, фотки вислати?)
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
#односвязныйсписок #динамическиеструктурыданных #SimpleCode #урокипрограммирования
@ertargn
@ertargn 6 лет назад
спасибо чувак.. сними уроки для c#. буду благодарен
@user-zt5hj1um5l
@user-zt5hj1um5l 2 года назад
3 часа бился над ошибкой, почему не выводит результат lst[2], при этом забыв завести команду lst.push_back(22). Только отладчиком понял, что условие if не возвращает результат, потому что 3 переменную листа не завёл)) Кстати в кодблокс пришлось у Node делать тип T1, иначе не работает. Спасибо комментариям снизу. Тема обсуждалась, когда число подписчиков было 10 тыс, а я смотрю когда уже 233 тыс. Спасибо, Сергей за отличные уроки. Надеюсь через год переквалифицируюсь из инженера-конструктора в программисты.
@oraclevb5430
@oraclevb5430 4 года назад
лучший!
@hotabmax6431
@hotabmax6431 4 года назад
Мы создаём объект List. Внутри объекта лист счётчик и капсула Node с адресом следующей капсулы и данными. Функция push_back создаёт указатель на первую капсулу. Если адрес следующей капсулы равен нулю, то в переменной pNext мы создаём новую капсулу, если же там есть адрес то мы перебираем все адреса путём присваивания из капсулы head параметра pNext следующего адреса в переменную current. И так пока адрес следующей капсулы не будет равен 0. И опять же дойдя до этого элемента присваиваем в параметр pNext следующую капсулу. 3 дня ушло чтобы это всё понять)
@user-oo9tn8fj7i
@user-oo9tn8fj7i Год назад
Привет а зачем нужно создавать временный указатель(current) ?
@Jeff-cn4sf
@Jeff-cn4sf Год назад
@@user-oo9tn8fj7i она типа временная, я тоже задался этим вопросом. Попробовал сделать без нее используея this->head ну и это даже не компилилось) Это позволяет, я так понял, обращаться по очереди к каждому адресу это в случае перегрузки operator[], а в PushBack() это позволяет последовательно создавать новые элементы списка. Трудно объяснить к сожалению, но отладчиком все хорошо можно проследить)
@nick-ei2og
@nick-ei2og Год назад
По сути в этом нет ничего сложного, просто столько времени уходит на понимание, потому что никто не умеет нормально объяснять, выделяя основную суть что и зачем делается. Что автор, который заваливает кодом, нежели говорит суть, что этот комментарий, под которым я пишу, в котором уровень пунктуации на крайне печальном уровне. Из-за этого вполне простые вещи в голове разбрасываются в хаотичном порядке, и становится сложнее втройне, просто потому что людям не дано нормально объяснять
@Lol-nz7fn
@Lol-nz7fn Год назад
@@nick-ei2og Сказал человек, который растянул мысль на целый параграф)))
@Lol-nz7fn
@Lol-nz7fn Год назад
@@user-oo9tn8fj7i Указатель current мы создаём потому что он перебирает все элементы, тем самым присваивая себе эти элементы по очереди, пока не дойдёт до последнего элемента и дальше не создаст новый(речь идёт о Push_Back), а head нельзя изменять потому что это начальный элемент
@user0tgvyjfc
@user0tgvyjfc 2 года назад
Классное видео! Кстати можно было избежать цикла while при добавлении не первого элемента в push_back, например, объявив Node* last рядом с head и далее использовать в push_back.
@overdoses1794
@overdoses1794 6 лет назад
Уважаемый, Сергей! 10к подписчиков, с чем я вас сильно поздравляю=). Надеюсь ролик о том, как вы стали программистом монтируется(просто не терпится послушать).
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
Спасибо! Я всё помню, ролик будет завтра.
@pashastatch8313
@pashastatch8313 4 года назад
Сегодня на собесе загрузили по данной теме, хотя опыт 20 лет на сях. Всегда есть чему учится.
@pavelnovikov3894
@pavelnovikov3894 2 года назад
браво
@aggressivnyy
@aggressivnyy 4 года назад
КРАСАВА
@user-pq5si5mk3z
@user-pq5si5mk3z 9 месяцев назад
спасибо.
@darth_kenobi4136
@darth_kenobi4136 2 года назад
Для тех кто не понял как работает pNext: while просматривает значение current->pNext, если оно не nullptr то берет значение адреса памяти следущего елемента. а присваиваеться это следущее значение текущему в функции push_back этими строчками: Node* current = this->head;//создаеться указатель на первый указатель класса если у первего указателя переменная pNext = null; то создаеться новый екземпляр класса Node с pNext = null, а pNext у head(если изменить значение у указателя то значение основного обьекта также смениться) становиться равным адрессу памяти нового екземпляра при помощи: current->Nextptr = new Node(data); и так можно добавлять елементы до бесконечности, каждый елемент будет хранить указатель на следущий
@rudthakyred_alert6359
@rudthakyred_alert6359 2 года назад
Не знаю как в VS17 а в VSCode и компиляторе g++, чтобы исключить ошибку декларирования ("error: declaration of template parameter 'T' shadows template parameter") можно писать так: template class List { private: template //Т - ненадо объявлять, т.к. переменная объявлена ранее class Node { public: Node *pNext; T data; Node(T data = T(), Node *pNext = nullptr) { this->data = data; this->pNext = pNext; } }; Node *head; int Size; public: List(/* args */); ~List(); void push_back(T data); int GetSize() { return Size; } T &operator[](const int index); };
@dfc56
@dfc56 12 дней назад
Огромное спасибо. Очень выручил!
@user-jm5dk2nh7t
@user-jm5dk2nh7t 5 лет назад
Урок предельно понятный и информативный, но нужно еще и самому всё это написать и пробежаться отладчиком.
@TGrod
@TGrod 3 года назад
Ну push_back можно было бы оптимизировать. Просто в list хранить ещё и указатель на последний элемент. Далее мы в поле последнего элемента приравниваем новый указатель new Node (data), после чего просто в указатель в List мы приравниваем вновь созданный указатель
@thetiphon
@thetiphon 11 месяцев назад
Я думаю объект типа T в функцию push_back надо передавать по ссылке, а не по значению. А то получается ты копируешь объект 3 раза: из main в push_back, из push_back в конструктор Node и из конструктора Node в переменную data класса Node
@sergeysitenko
@sergeysitenko 3 года назад
У вас в плейлисте "Основы C++. Программирование для начинающих" не хватает теории про односвязный список. (то что ссылка в описании видел)
@krazly677
@krazly677 10 месяцев назад
и весь остальной плейлист про динамические структуры данных
@user-vf9gm9zn4x
@user-vf9gm9zn4x 4 года назад
в реализации оператора индексации, после цикла while желательно написать обработку ситуации, когда индекс меньше количества элементов. Т.е. while(current!=nullptr) выполнится раньше, чем найдем индекс. Обычно компиляторы такой код не компилят, но х3. Спасибо, брооо
@eninyri
@eninyri 3 года назад
а не должно быть - while(current->Nextptr != nullptr) ?
@prostocrazy1105
@prostocrazy1105 Год назад
я целых часов 5 наверное сидел и перетирал что вообще происходит(в частности с тем откуда 2 поля(pNext) у 1 переменной )
@alexandrkryvopust7505
@alexandrkryvopust7505 2 года назад
Может кому-то будет изначально не понятно как и мне. Указатель head содержит адрес по которому одновременно хранятся данные + указатель на следующий элемент. Соответственно когда в функции push_back мы создаем указатель current то в него попадает, то что лежит по первому элементу List (это два поля данные и указатель(который, для случая, что у нас только 1 элемент листа все еще равен nullptr). Затем мы в поле указателя ячейки листа у которой поле указателя на следующий элемент равно nullptr присваиваем адрес данных (новая ячейка) которую мы функцией Push_back добавляем.
@RensetVideos
@RensetVideos 6 лет назад
Спасибо за урок, но было бы лучше, если на простые вещи было бы меньше акцента, а на более сложные - больше.
@ilyat7109
@ilyat7109 4 года назад
Данная программа не компилируется, выдается ошибка (declaration of template parameter 'T'). Проверил в нескольких компиляторах везде одна и та же ошибка. Как её решить? А главная, почему программа в ролике вообще компилируется ???????????????
@KorolElizavetaR
@KorolElizavetaR 10 месяцев назад
Ловите мой вариант функции push_back void List::push_back(T info) { if (tail == NULL) tail = head = new Node(info, head); else tail = tail->next = new Node(info); size++; } в этом варианте в классе должен быть еще Node*tail, который всегда будет находиться в самом низу списка (он все еще односвязный), tail->next всегда = NULL. Такой вариант кода позволяет не пробегать по всему списку каждый раз, когда элемент надо добавить вниз.
@pashakkaa
@pashakkaa 5 лет назад
Автору огромное спасибо за урок! Скажите, пожалуйста, обязательно ли внутренний класс Node делать шаблонным? Ведь и класс List, и класс Node всегда будут работать с одинаковыми типами данных.
@koral7441
@koral7441 11 месяцев назад
Сложно, но понять можно!
@Russian-Stalinist
@Russian-Stalinist 4 года назад
Главное, что определение методов внутри определения класса делает их встроенными, что не нужно в большинстве случаев. А уже потом это загромождает код.
@_girnetix_
@_girnetix_ 2 года назад
Было бы неплохо добавить указатель на последний элемент этого списка, т.к. при больших значениях узлов такого списка, его создание займёт огромное количество времени
@user-qj6tk5fw9p
@user-qj6tk5fw9p 2 года назад
даужь, начались наконец то уроки по сложнее
@mrrodman5265
@mrrodman5265 5 лет назад
Вопрос: как сохраняется указатель *current, который создался в методе push_back? Разве он не должен уничтожится когда мы выходим за область видимости?
@user-tb7yn5yy3g
@user-tb7yn5yy3g 4 года назад
мозг кипит)
@alexandrkarpov4544
@alexandrkarpov4544 3 года назад
Спасибо за уроки, Сергей! Надеюсь еще читаете эти комментарии. Такой вопрос: Решил после просмотра серии уроков про список, написать самостоятельно по полученным знаниям свой класс списка. И на моменте описания перегрузки оператора [ ] у меня получились расхождения с вами. В моем случае я эту перегрузку описал так: template T& List::operator[](int index) { int counter = 0; Node* current = head; while (counter != index) { current = current->pNext; counter++; } return current->data; } Подскажите, как мне кажется мой вариант более компактный, однако он допускает значения индекса больше, чем список имеет значений. И в случае превышения индекса программа завершается с ошибкой, как это было бы с обычным массивом, выйдя за его пределы. В вашем же случае, при выходе за границы результат всегда будет 0. Помню вы говорили, что лучше если программа завершится с ошибкой, чем выдаст какое-то значение, из-за которого дальнейшая работа будет некорректна и мы устанем искать причину такого поведения. Собственно вопрос, как лучше описывать эту перегрузку?)
@krazly677
@krazly677 10 месяцев назад
Node *current = this->head; for (int i = 0; i < index; i++) { current = current->pNext; } return current->data; Я описал это вот так. Но в моём случае при отрицательном значении индекса оператор возвращает первый элемент списка. Но не думаю, что это большая проблема
@dedreddead
@dedreddead 5 лет назад
По-моему намного выгоднее завести отдельный указатель на конец списка (tail) и без этого цикла сразу полю next этого указателя присваивать новый node. И затем просто переставить указатель на конец списка этому новому node. if (head == nullptr) { head = new node(elem); tail = head; } else { tail->next = new node(elem); tail = tail->next; }
@user_x138
@user_x138 3 года назад
Я устал пересматривать этот урок. Уже сотый раз прохожу отладчиком по коду, чтобы уяснить логику. В прошлый раз такая же проблема была на перегрузке конструктора копирования. Осилил его - осилю и этот. Сергей ты лучший
@SeshAlex
@SeshAlex 6 лет назад
Кстати. Запустил прогу, вписал 50 тыщь, и консоль затупила)) Теперь я понял в чем разница списка и массива. Массив быстрее работает с большими индексами.
@user-yn7gi6os8d
@user-yn7gi6os8d 2 года назад
Ахахахах, тоже показательный пример
@sergeychernov5094
@sergeychernov5094 3 года назад
Ребята, подскажите пожалуйста, каким образом новый экземляр класса Node присваивается укателю header в области видимости метода pushback 16:30 строка 60 (Node* header = new Node(data)). Как это работает? Обычно к указателям можно присвоить ссылки.
@user-mm8hc5uu1e
@user-mm8hc5uu1e 4 года назад
Подскажите, пожалуйста,в каких уроках начинается синтаксис типа "current->data"?
@user-hm7wm5pk5m
@user-hm7wm5pk5m Год назад
Я правильно понимаю, что pop_back невозможно сделать за O(1), так как даже, если у нас есть указатель на послед. элемент, то, имея односвязный список: []->[]->[]->nullptr , чтобы удалить последний нужно предпоследнему сделать nullptr, иначе будет висячий указатель(последний же удалится). Предпоследний же нужно также перебирать сначала списка.
@user-sr5qh2xj2g
@user-sr5qh2xj2g 6 лет назад
Если мы динамически выделяем здесь память, почему нет ее освобождения?
@user-zd9pc1tk7r
@user-zd9pc1tk7r 5 лет назад
А если через оператор индексирования нужно вывести несколько элементов, как это сделать?
@anastasiagolomazova4961
@anastasiagolomazova4961 3 года назад
Знаю вопрос глупый, но! Не могли бы вы объяснить почему мы не можем класс Node вписать вне класса List и потом просто к нему обращаться
@danielto1404
@danielto1404 5 лет назад
Было бы круто хранить текущий size и tail тогда все кроме взятия индекса за О(1))))))
@user-ll5dg6zm8d
@user-ll5dg6zm8d 2 года назад
Здравствуйте! Можете ли сказать,почему когда мы выделяем дин память под елемент,мы не удаляем его в конце в деструкторе? Мы же по сути не очищали память,а все равно прога компилируется
@higiro9333
@higiro9333 3 года назад
Окей, а что там с деструктором?
@i4q236
@i4q236 6 лет назад
Сергей, привет! Спасибо за реализацию списка! Это твоё первое видео такой внушительной продолжительностью...насколько я помню было одно длительностью 30 минут конструктор копирования! Когда будешь записывать видео ответы на ваши вопросы озвучь, пожалуйста, с помощью какой программы монтируешь видео! Случайно не Sony Vegas Pro 13? ))))
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
Пожалуйста! Монтирую с помощью Vegas Pro 14
@Amigo_GO
@Amigo_GO 3 года назад
20:42 Для тех кто решил запустить код на этом этапе и компилятор выдал ошибку: Нужно прописать деструктор класса List, хотя бы пустой.
@ryangosling7954
@ryangosling7954 3 года назад
Господи, чувак, спасибо большое! Деструктор у меня был, но похоже кривой, но заработало!
@shibu5180
@shibu5180 Год назад
спасибо
@user-ih8ov6uu6f
@user-ih8ov6uu6f 5 лет назад
Серьезность Код Описание Проект Файл Строка Состояние подавления Ошибка C2440 =: невозможно преобразовать "List::Node" в "List::Node *" with [ T=int ]
@tapirskiy
@tapirskiy 4 года назад
та же ерунда
@love_skinny
@love_skinny 3 месяца назад
В классе List в конструкторе Node в скобках напиши так: Node(T data=T(), Node* pNext = nullptr)
@user-tl9qe9hg5s
@user-tl9qe9hg5s 4 года назад
head = head->pNext;//head получает адрес следующего элемента списка Но где в коде описано когда этот адрес на следующий элемент получен? Когда head->pNext получило какое-то значение, а не nullptr?
@user-rq8db7oy3p
@user-rq8db7oy3p 5 лет назад
выдает ошибку error: declaration of template parameter 'T' shadows template parameter|
@assert_null
@assert_null 4 года назад
Потому что Node не должен быть шаблоном, если List - шаблон. Или, по крайней мере, имя шаблонного параметра у Node не должно совпадать с таковым у List. Но лучше все-таки первый вариант.
@Retyioaqe
@Retyioaqe 5 лет назад
Если выдает ошибку "error: declaration of template parameter 'T' shadows template parameter", то попробуйте назвать параметры по-разному: например T для class List и T1 для class Node.
@TheWladberlin
@TheWladberlin 4 года назад
Что-то все-равно не идет, та же ошибка
@TheWladberlin
@TheWladberlin 4 года назад
бл... я Т по ходу кириллицей писал! Теперь все норм.
@Anatolii_V_Novikov
@Anatolii_V_Novikov 9 месяцев назад
Так вот почему делают итераторы - в частности, чтобы при последовательном выводе элементов списка (например, на печать) не искать элементы для каждого индекса заново и получить при этом O(n) вместо O(n^2). И, кстати, push_back() в ролике сделан со сложностью O(n) из-за того, что нет указателя на хвост head.
@andrytitoruk4205
@andrytitoruk4205 4 года назад
невозможно преобразовать аргумент 1 из "Т" в "List::Node *"
@Andrey-qj9sj
@Andrey-qj9sj 4 года назад
Нашёл решение?
@andrytitoruk4205
@andrytitoruk4205 4 года назад
@@Andrey-qj9sjнет
@oljaolsa7261
@oljaolsa7261 4 года назад
поміняй місцями параметри в класі нут в круглих дужках спочатку напиши T data=T() а потім Node *pNext
@user-vt1qt3ub1q
@user-vt1qt3ub1q 4 года назад
@@oljaolsa7261 Вы серьезно думаете что все знают укр язык?
@user-vt1qt3ub1q
@user-vt1qt3ub1q 4 года назад
Код целиком скинь
@nikita3471
@nikita3471 6 лет назад
Посоветуйте, пожалуйста, источники с обучением программированию на языке java script.
@sergeiivanov5739
@sergeiivanov5739 6 лет назад
Nikita klinchev w3school
Далее
КТО ЭТО БЫЛ?
25:31
Просмотров 545 тыс.
Зачем нужны указатели в C++?
8:14
Просмотров 1,8 тыс.
Собеседование Junior C++
45:32
Просмотров 102 тыс.