#4. Примеры реализации статических массивов на C++ | Структуры данных

  Рет қаралды 16,568

selfedu

selfedu

Күн бұрын

Пікірлер: 39
@MrNagios
@MrNagios 2 жыл бұрын
да какой же там у тебя запас продуктивности? я не успеваю просматривать твои видео как ты делаешь новые. И качество отменное. Просто клад, спасибо большое!!!
@denisobrezkov4354
@denisobrezkov4354 2 жыл бұрын
> И качество отменное Не хочу принижать ценность трудов автора, но поверьте мне, если вы будете писать такой код на собеседовании даже не на джуниор, а на стажерскую позицию, вас в нормальную компанию не возьмут.
@MrNagios
@MrNagios 2 жыл бұрын
@@denisobrezkov4354 ну так это же обучающий материал, мне не понятно ООП или структуры данных, Балакирев отлично объясняет именно его, доступным мне языком. Думаю если он будет обучать тому, какой именно код писать, он и с этим справится. Посоветуй и ты тогда, где посмотреть то - КАК писать правильный код
@denisobrezkov4354
@denisobrezkov4354 2 жыл бұрын
@@MrNagios если человек так пишет код, я бы просто не стал доверять ему в любом случае. Где гарантия, что другие вещи он объясняет правильно? Я бы рекомендовал читать CPPCoreGuideLines и книжки Майерса по С++.
@evgeniyamoroz8153
@evgeniyamoroz8153 Жыл бұрын
@@denisobrezkov4354 а что конкретно не так с этим кодом?
@AlekseiPashkan-r2p
@AlekseiPashkan-r2p Жыл бұрын
@@denisobrezkov4354 Выкладываете свои видео, а мы посмотрим. Заодно научимся как нужно писать код, правильно
@СтепанИльин-к4ю
@СтепанИльин-к4ю 2 ай бұрын
Спасибо. Очень толково. Учебный материал - "бьет в глаз, а не в бровь". Очень понятно. Давно искал.
@arch9834
@arch9834 Жыл бұрын
Очень полезные видео, информация хорошо в голову укладывается. Отдельное спасибо за лайв-кодинг! Когда программа пишется построчно - это воспринимается намного лучше, чем когда делаются склейки со вставками кусков кода.
@ОлесяКравцова-й4ш
@ОлесяКравцова-й4ш 6 ай бұрын
Спасибо за столь приятное и понятное объяснение!
@betep3526
@betep3526 Жыл бұрын
Только начал смотреть. Спасибо что ты есть, добрый человек! Потмоу что не в каждой книге настолько понятно и доходчиво объяснят. Конечно же книги читаю, но там бывают куда более худые примеры.
@ЕрвандАгаджанян-в3к
@ЕрвандАгаджанян-в3к 2 жыл бұрын
Сергей, спасибо! Никогда до этого дня не программировал на C++. Специально установил себе компилятор, чтобы самому все это дело руками проверить. Просто супер! И да, вы правильно сделали, что выбрали C++ для этой темы) Можно было еще выбрать Go, однако на нем точно пишут меньше людей, чем на Python и C++
@siarheiulas6969
@siarheiulas6969 Жыл бұрын
Как всегда очень интересное видео! Спасибо!
@mavendalzhidar3382
@mavendalzhidar3382 2 жыл бұрын
Надо же я все понял хотя только пайтон знаю. Думаю надо c++ вторым языком выучить для хорошего понимания работы структур данных. В пайтоне это все не очевидно и он непостоянный какой-то. Отличное видео спасибо)
@intxxicated6495
@intxxicated6495 4 ай бұрын
Наверное, потому что там динамическая типизация? Ну, при желании, можно самому типы присваивать и писать как в си++
@gribovmax
@gribovmax Жыл бұрын
15:40 при `count_marks == 20` в 15 строчке в `marks[i + 1]` мы получим индекс превышающий верхнюю границу массива (index out of range). C++ производит какой то контроль этого и приложение упадет? Или мы просто прочитаем следующий за отведенной для массива памяти байт (в котором будет все что угодно)?
@eldarbilyalov8350
@eldarbilyalov8350 9 ай бұрын
Почему мы не делаем в программе "удаление элемента из массива" такую же проверку(выход за границу при сдвиге элементов на один право), как в первой задаче? Если у нас 20 оценок, и мы хотим удалить 20 оценку ( оценку с индексом 19), то получается, что мы присвоим адресу, где хранится 19 оценка, адрес 20 ячейки массива marks[19] = marks[20];, но его у нас нет, получается, что мы вышли за границы массива. Мы присвоим 19 ячейки мусор? Также мне кажется нужно удалять значение из ячейки, которое было до сдвига. Предлагаю следующий вариант кода, подскажите, правильно ли я рассуждаю? #include int main(){ const int N = 20; char marks[N] = { 2, 4, 2, 3 }; int count_marks = 4; int index_delete = 3; int end = (count_marks < N) ? count_marks: N-1; for(int i = index_delete; i < end; i++){ marks[i] = marks[i+1]; } marks[count_marks-1] = 0; if (count_marks > 0){ count_marks--; } for (int i = 0; i < count_marks; i++){ std::cout « marks[i] « std::endl; } return 0; }
@koshakpoc2876
@koshakpoc2876 2 жыл бұрын
Можете показать реализацию красно черного дерева ?)
@baxram97
@baxram97 2 жыл бұрын
А почему не используете cout?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
без разницы, можно и его
@firstandlast4435
@firstandlast4435 2 жыл бұрын
А разве в сторонних библиотеках питона нет поддержки статичиских массивов. Я что то слышал о таких типах данных как array.array и в numpy тоже что то подобное есть, могу ошибаться
@selfedu_rus
@selfedu_rus 2 жыл бұрын
в базовом Python нет, в numpy да, можно его считать статическим, верно
@WixxTeR
@WixxTeR 2 жыл бұрын
я так понял след будет тоже самое но на питоне?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
на питоне нет статических массивов, поэтому дальше динамический массив
@Katar1x
@Katar1x Жыл бұрын
Был бы у меня такой препод...
@romanyshyn6311
@romanyshyn6311 2 жыл бұрын
Добрый день,Сергей сделайте пожалуйста возможность оплатить ООП курс на stepik не только из России,а из других тоже
@dinnerbone313
@dinnerbone313 2 жыл бұрын
Я могу ошибаться, но это не его проблема. Надо задавать вопрос разработчикам Stepik.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
да, это вам нужно в поддержку Stepik писать, я к этом сервису не имею отношения
@nikitun85
@nikitun85 Жыл бұрын
Я, конечно, придираюсь. Для начинающих программистов, наверное, такое упрощение уместно, но, строго говоря, массив, создаваемый в C++ с помощью оператора new(), в большинстве источников по C++ (и во всех, попадавшихся лично мне) определяется как динамический массив. Я посмотрел следующий урок, где вы определяете динамический массив как массив, который может менять свой размер в процессе работы программы. Это наталкивает на противоречие. Многие столкнутся таким определением статического и динамического массивов в C++: массив, размер которого должен быть задан константным значением на этапе компиляции, это статический массив. В свою очередь массив, размер которого может быть определен во время исполнения программы, - динамический. Просто получается, что по вашей логике в C++ динамическим массивом может считаться std::vector, который имеет все отвечающие вашему определению функции: push_back(), pop_back(), resize() и т.п. Но это просто шаблонизированная надстройка над встроенным динамическими массивами, создаваемыми через new(). То есть, наверное, можно сказать, что описанная вами в следующем уроке логика динамического массива, это логика часто встречающейся его высокоуровневой реализации. В то время как массивы, созданные через new(), отвечает ключевому низкоуровневому определению. Звучит немного коряво, но, надеюсь, понятно. ) Было бы неплохо акцентировать на этой возможной путанице внимание.
@selfedu_rus
@selfedu_rus Жыл бұрын
Есть такая путаница, но в данном случае речь идет о массиве, который меняет свои размеры, а динамика оператора new лишь означает, что мы создаем массив "на лету" в процессе работы программы, а не прописываем заранее. Здесь слово "динамический" используется в разных смыслах.
@electronic008
@electronic008 Жыл бұрын
@@selfedu_rus И все же, массив, создаваемый с помощью new - это динамический массив априори. И разница здесь в хранении информации (в какой области памяти) Статический массив - это массив на стеке, т.е. весь массив лежит на стеке и его размер должен быть известен на момент сборки кода. Динамический массив -это массив в куче, на стеке создается только переменная которая будет хранить адрес массива который можно будет создать в куче, любого размера, и через этот адрес получить доступ к массиву. Память, выделенную под динамический массив следует освобождать принудительно, чтобы избежать ее утечек.
@alex6161
@alex6161 Жыл бұрын
@@electronic008 верно ли я понимаю: массив с переменной через new как показано во втором способе - это массив, размер которого не известен на момент запуска программы, но который можно задать по ходу её работы только один раз ? То есть когда n будет равен 100, y будет указывать на кусок памяти в 400 байт и этот кусок памяти будет неизменен в своем размере до конца работы блока. А динамический массив же можно менять в размере столько сколько потребуется ?
@electronic008
@electronic008 Жыл бұрын
@@alex6161 Что-то вы смешали все в кучу. Массив c оператором new в C++ (и malloc()/calloc() в С) - это и есть динамический массив. Динамический массив в С - это массив, у которого количественное значение ячеек задается переменной, а значит, его размер может изменяться. Такие массивы нужны для того, чтобы более эффективно эксплуатировать оперативную память компьютера в С-программах. Напомню, что в статическом массиве количество ячеек задается числовой константой, а не переменной. И главное отличие - в области хранения памяти (в куче (Heap) в случае динамического массива и на стеке в случае статического.)
@electronic008
@electronic008 Жыл бұрын
@@alex6161 Для хранения динамического массива (вектора) используется непрерывная область памяти. Всякий раз, когда вам нужно выделить больше памяти, а память недоступна в текущем расположении, весь массив копируется в другое расположение и выделяется дополнительная память.
@trimo1120
@trimo1120 2 ай бұрын
Оператор new не создаёт статический массив, а это уже динамический, он создан не в стеке, а в куче. Тем более для маленьких элементов он бессмыслен, так как дополнительно вызывает системный вызов, тратя множество ресурс пк.
@Ssar-yy
@Ssar-yy Ай бұрын
Зачем надо было вводить c++? На python было бы легче понимать
Real Man relocate to Remote Controlled Car 👨🏻➡️🚙🕹️ #builderc
00:24
Миллионер | 3 - серия
36:09
Million Show
Рет қаралды 2,1 МЛН
快乐总是短暂的!😂 #搞笑夫妻 #爱美食爱生活 #搞笑达人
00:14
朱大帅and依美姐
Рет қаралды 13 МЛН
Всё об указателях в C++ за 20 минут
20:00
Real Man relocate to Remote Controlled Car 👨🏻➡️🚙🕹️ #builderc
00:24