Динамический массив с++ пример. Создание, заполнение, удаление, размер динамического массива. #55
Вставка
- Опубліковано 30 лип 2017
- Понравилось видео или оказалось полезным? Подпишись!
Динамический массив с++ пример. Создание, заполнение, удаление, размер динамического массива. #64
Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут! =)
www.donationalerts.ru/r/simple...
или тут
/ simplecode
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit
*Друзья, если вы решили изучать программирование и подписались на канал - рекомендую вам нажать колокольчик чтобы никогда не пропускать новые уроки!*
Можно ли вместо динамического массива использовать векторы? Или вообще полностью заменить динамический массив на вектор.
@@user-yu1qi7pl9c Думаю нет((
@@UFO26, размер динамического массива не узнаётся , а устанавливается в ходе исполнения кода в зависимости от использованного алгоритма , к примеру :
const uint16_t MAX_SIZE = 65535;
uint8_t
WidthLine =137 ;
for (uint16_t size = WidthLine ; size < (MAX_SIZE - WidthLine); size = size + WidthLine)
{ int * arr = now int [size] ; for (... дальше как в ролике... }
Итак : наш size изначально имеет размер 137 , и в ходе исполнения шагов кода каждый раз увеличивается на число из переменной WidthLine =137 , и уже никогда не превысит 65 535 (я вычитаю WidthLine из MAX_SIZE , чтобы не случилось переполнения , ибо MAX_SIZE может быть не кратно WidthLine). Но при желании , и MAX_SIZE можно сделать не константой а переменной, куда операционка будет вкладывать значение допустимой длины непрерывной свободной области памяти .
Лучший
7:18 это лучший момент когда сергей программист наверное уровня мидл вводит cout с 10 раза ))))))))
7:10
;)
Вы, наверное, первый человек, которому стараюсь не забывать ставить лайки под каждым видео.
Благодарю за поддержку!
так же)))
Аналогично, даже иной раз переживаю, а не забыл ли палец вверх клацнуть, увлекшись содержимым урока.
Аналогично !!!
Так же
спасибо большое за детальное объяснение! многие упускают всякие детали, когда объясняют, думая, что человек сам знает, что это, а вы прям и ссылки даете на нужные свои старые ролики, чтобы проследить логику уроков, если не понятно, и объясняете кратко, что дает возможность освежить старое, в общем. СПАСИБО ВАМ!!!
Пожалуйста! Благодарю за поддержку!
ЛУЧШИЙ НА РУНЕТЕ.
ТЫ ДАЕШЬ ВОЗМОЖНОСТЬ ТЕМ, У КОГО ПРОБЛЕМЫ С ФИНАНСАМИ, БЕЗ ДЕНЕЖНЫХ ЗАТРАТ ИЗУЧАТЬ ПРОГРАММИРОВАНИЕ. СПАСИБО БОЛЬШОЕ!!!
Открою небольшую тайну, есть куча бесплатного качественного материала по изучению программированию. Книги хорошо подходят, но не для всех. Бесплатные курсы, абсолютно всем подходят. А видосов на ютубе и не только, вагон и маленькая тележка, при чем только русскоязычных,а сколько же на английском, представить сложно
Сергей здравствуйте, я всегда думал что видео контент в сферах науки, это скорей кусок дерьма чем источник познавательности, люблю книги (хотя сложно даются), но когда я наткнулся на Ваш канал, он изменил всё представления об видео уроках, повторяю сейчас с++, много положительных эмоций Вы мне дали, спасибо что Вы есть, огромное Вам человеческое спасибо!!!!!!!счастья Вам и процветания.
И пару недель назад начал смотреть только твой канал от начала до середины (пока что), зная что лучшего для меня не сыскать, значительно многие уроки я уже запоминаю с одного просмотра, а то что нет смотрю снова ведь искать ответы у других это нереально, реальнее смотреть видео снова ведь вы там объясняете все очень четко что редкость.
Как то год учил именно этот язык, потому что другими ЯП (кроме С и АСМ) многие микроконтроллеры не возможно программировать, но чудо то какое только после твоих уроков я понял суть вещей в С++, даже в SOLOLEARN тройное прохождения С++ не помогло углубиться так. Спасибо за уроки, от тебя действительно выйдут много толковых учеников, чем у тех кто показывает о С++ в ютубе, а я их поведал не мало пока не нашел твой канал.
спасибо тебе. А то я одному дебилу объясняю, что здесь проще, а он упирается, твой коммент помог мне в решении данного вопроса, спасибо!
Доступно и понятно! Спасибо вам большое, что стараетесь)
Уважаемый Сергей, спасибо за видео!
Чем больше я учусь те больше понимаю что програмирование это командное дело . Спасибо и это фудоментальное добро вы делаеете как для языка так и для милионов людей кто то из них может что то сконструирует и а основы были истоки на вашем канале огромное Спасибо. За свет оброзования . За вдохновение и детали програмирование это командная деятельность . Репост это меньшее что я могу зделать .
Спасибо за уроки, все разжевано и понятно!
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
ОЧень хорошие уроки !!! Спасибо за Ваш труд !!!
Сергей, спасибо большое! Нереально круто объясняешь
#динамическиймассив #SimpleCode #урокипрограммирования
*комментарий для продвижения ролика* спасибо за уроки!
Очень доступно объясняешь! Всегда смотрю твои видео, если не могу вникнуть в тему, которую нам задают.
Благодарствую.
Удачи и успехов в делах.
👍🏾
Прекрасно подготовлены материалы уроков и грамотно поданы, осталось только усвоить и применить ;)
Сколь много я узнал !!! Спасибо вам большое.
Очень круто! Спасибо большое за такое доступное и понятное объяснение всего)
Я обожаю Ваш канал и этот курс. Благодаря вам покорить программирование становится проще, спасибо вам огромное!
Классный урок, очень приятно слушать
Спасибо за уроки, всем кто спрашивает вас рекомендую
Вау это прям совокупность всего, что проходили круто преподаешь!
Сергей - гуру!
Спасибо!
Как всегда всё супер и по порядку))) Спасибо большое
Пожалуйста! =)
Очень круто и интересно!
Спасибо большое:)
*Большое спасибо! Очень полезное видео!*
Спасибо тебе за уроки.
Какой же вы очень хороший человек Сергей!!! Я от души благодарен за ваши уроки. Пусть всегда с вами будет счастье и здоровье и любимые люди!!!! Я понимаю что можете сказать что я вас не знаю и почему пишу что вы хороший человек? Простая логика, у плохого человека не может быть так хорошо получаться так отлично объяснять что нибудь, тем более программирование))) еще раз спасибо огромное!!!
Прекрасное объяснение! 🤟🤟
Благодарю за данный урок. Все достаточно информативно и просто для изучения.
Пожалуйста!
Ты просто лучший!!!
Отличный и интересный урок
Подача урока на высшем уровне, жаль мало таких людей которые от души всё объяснят и так максимально легко что даже первоклашка сразу поймет. Всем бы так научится подавать материал а то ищу про Python одни профессора блин которые думают что всё все уже знают и сходу начинают всякие приложения писать.
А Вам Сергей здоровья крепкого и успехов во всём!
Огромное спасибо вам🔥
спасибо за урок! :)
За урок спасибо!
мне нравится, как в каждом уроке вы "рекламируете" предыдущий урок.
если кто-то нечаянно попадёт на 55 урок, то ему придётся пересмотреть все уроки в обратном порядке.
это такой себе рекурсивный урок. чтоб посмотреть 55ый, нужно посмотреть 54 предыдущих и вернуться на 55ый)
Вероятно один из самых удачных примеров рекурсии)
не, вначале рекурсии почти не было, где-то с 40го началась))
just thank you!
Спасибо, очень хорошо, что недостатки плюсов показываете.
это не недостатки, это фичи))
7:17 - Господи, да попади уже по клавишам)
Спасибо за урок, сенсей
сорян, клавиатура под столом, печатаю в слепую =)
Продолжайте в том же духе, это весело)
Огромное спасибо за уроки, у вас талант учителя великолепный, продолжаю учиться по ним.
Поздоровляю с 350к просмотров)скоро милион будет)
ты лучший
Спасибо!
that`s amazing!!!
Класно!
Спасибо за видео. Теперь я понял как работала програма для взлома игр ArtMoney :) Её нужно было указать текущее значение денег, параметров или еще чего-то численного и когда она находила нужное значение пробовала поменять его. Теперь, я думаю, смог бы написать подобную программу ;)
А есть тут на канале видео о циклических сдвигах в двумерных массивах? А то про сдвиги в одномерных массивах информации много, а про двумерные что-то не нахожу толкового... А вообще очень хорошо и доходчиво всё объясняется. Сергей - молодец!
Благодарю 🙏
Спасибо
спасибо!
спасибо
19:20, данные, которые лежат в этой ячейке принадлежат только этой программе и этому процессу, если бы это был кусочек видео из бандикама, то операционная система бы немедленно закрыла процесс из-за того, что она пытается достучаться к участку памяти, не принадлежащему ее процессу. Так что там лежат данные только этого процесса, ничто другое быть не может.
@Mimyagu artmoney получает так называемый handler процесса, через который и модифицирует данные оперативной памяти процесса и операционная система уже не считает это вмешательство «нелегальным»
Сергей, здравствуйте! Спасибо за подробный рассказ. ПОдскажите как удалить часть массива, тем самым уменьшить его длину?
лукас)
В matlab все объекты динамические и там была команда pack. В си были функции mark и relese , что посоветуете в cpp?
добрый день, у меня такой вопрос, пишу логику для плиточной игры на готовом движке (ue4), в проекте сделал класс инвентарь и в него добавил динамический целочисленный массив для записи Id предметов которые находятся у игрока, динамический потому, что инвентарь в процессе игры должен расширяться с уровнем игрока, в ue4 в каждом классе есть событие event tick которое вызывается каждый кадр, правильно ли я понимаю, что каждый кадр для массива будут выделяться разные ячейки памяти и выбираться такие адреса что бы мой массив поместился следуя арифметике массивов?
Спасибо с Украины) Лайк
И я Украинский ЛАЙК жмакаю после каждого видео на своих 2-х аккаунтах !!!
А не подскажите, почему в xcode в статическом массиве, когда задаем ему размерность можно отбросить const?
Если кто-то задумывался (и не знал) над тем, как работает 16-ричная система , то цифры ( а именно 1 2 3 и так далее до 9 ) записываются без изменений , а уже числа (>= 10 и < 16) будут иметь вид английского алфавита - A B C D E F где A=10 B=11 C = 12 D = 13 E = 14 F = 15, а вот число 16 принято писать за 0.
Какие числа? Это цифры, а цифры 16 нет в 16церичной системе
@@arsIsv цифры это от 0 до 9
@@user-vo4en4xf3g по твоему F это не цифра в 16ричной системе счисления?)
@@arsIsv я тебе про 10-тичную говорю
@@arsIsvчел просто хотел помочь, а ты нашёл совсем безобидную ошибку и говоришь об этом, это говорит о том, что у тебя самооценка низкая
05:29 - массив это непрерывная область памяти
13:23 - обязательно условие: чтобы в оперативной памяти было свободный непрерывный участок памяти
13:56 - в отладчике мы сможем увидеть только самый первый элемент
Массив - это тип данных. В отладчике вы можете увидеть не только самый первый элемент, но и весь массив целиком, при желании.
Нет в языках С/С++ типа данных «массив». Массив - это просто указатель на кусок памяти.
👍👍👍
Уважаемый Сергей!Если вы увидите ответьте пожалуйста!Во первых спасибо вам большое за эти уроки!Дошел вот 67 видео очень многое узнал,сам учусь в университете в Турции,благодаря вам я даже впереди того что обучают!!Вы дойстойны уважение!!Хотел у вас спросить на счет этой темы,вот у меня выходят разные числа в массиве да,но адреса одни и те же,это нормально?заранее благодарю!
Как в Турции образование? На кого конкретно учитесь?
Здравствуйте, Сергей. Будут ли бинарные деревья рассматриваться в дальнейшем?
Будут.
Вопрос, вы хотите сказать что система при выделении динамической памяти не контролирует выход за нее ?
Можно вопрос: динамическая память для массива еще актуальна? у меня компилятор не ругается на такое:
int n;
cin >> n;
int a[n];
тем более есть просто vector
7:11, боль
Спасибо, я больше не буду издеваться над памятью моего компа...
Уважаемый Сергей ты можешь сделать рубрику где вы будете отправлять исходники с ошибками а мы будем их
исправлять
нет, такого не будет.
это глупо
удоляй свой моссив, удоляй сказал, он динамический 💣
А чистить данные в ячейках массива через null или nullptr здесь ненужно, как в случае с обычными данными?
тоже интересно
Напишите, пожалуйста, если вы нашли ответ на вопрос
@@Kokurorokuko Напишите, пожалуйста, если вы нашли ответ на вопрос
@@crackall1946 имеет смысл установить в nullptr только сам указатель на массив (т.е. arr = nullptr)
@@leshiyni давно уже рашил этот вопрос. У меня плкйлист к концу подходит
Вопрос, нужно ли при работе с массивом стирать данные из указателя или нет?
Напишите, пожалуйста, если вы нашли ответ на вопрос
стирать адресс указателя вообще не обязательно в любом случае(операционная система сама стек чистит закрывая программу). Это делается ради удобства и для того, чтобы случайно не зацепить чужие данные
Какую комбинацию клавиш Вы используете для создания конструкции цикла for ?
пишем for потом нажимаем TAB;
спасибо)
Нельзя получить чужие данные, только данные, которые относятся к процессу
Скажите пожалуста как создать динамический масив, если размер будет постоянно менятся.
В векторах я могу использовать команду название_вектора.push_back(значение). Как это сделать с динамическим масивом? Я понимаю, что это уроки на с++, но мне нужен ответ на вопрос на язике с. Заранее спасибо.
Я делаю так же как и вы показывали. Выделяю под массив память, оперирую этими элементами и в конце очищаю выделеную память по указателю. Но что бы убедиться в очищености выделеной памяти я снова выводил эти же элементы и у меня выводило в консоль что очистился первый элемент а остальные сохранили свои значения (не очистились). Подскажи пожалуста.
Спасибо большое за урок, все очень понятно кроме одного момента. Почему всё-таки необязательно писать const у переменной size. Понятно что это с помощью new как-то работает, но как именно. Урок про new и delete смотрела все равно не поняла этот момент
если зададим константу для сайза, то нельзя будет менять его значение вводом любого числа, и на выходе получим обычный статический массив
@@_qubbix это понятно, но вопрос тут в другом. почему массив вообще создается с неконстантным размером?
Память не нагрузилась, а вот проц сразу наполовину и на буст частоты полетел)))
все таки задумался о пользе динамических массивов не могу понять их необходимость в разрезе............... ну как бы вот.
int main ()
{
int a,b;
cout > a;
cin>>b;
int arr[a]{}; //статический массив
int *arr1 = new int[b]; //динамический массив
//заполняем выводим статический
for (int i = 0; i < a; i++)
{
arr[i]=i;
cout
Подскажите пожалуйста как очистить полностью динамическую память
ваша переменная = nullptr или NULL;
@Musikan0
И доя чего ты дал неправильный ответ?
Почему компилятор в записи int *arr = new int [size] перемещает значок звездочки к int? То есть получается так:
int* arr = new int [size]. У Вас так не происходит.
А я всегда пишу int*, а нет int *. Так более понятнее. И для себя я понимаю, что указатель типа int. А когда *на, то это уже само значение, которое лежит в ячейке памяти
почему у меня при таком же коде, как на видео, адрес ячеек динамического массива одинаковый? а на видео с шагом в 4 байта?
Насколько мне известно, статические массивы тоже можно объявлять как неконстантные и инициализировать через ввод.
Я частично прав. Почему-то в Dev C++ не запрещено создавать массив из n элементов, где n - не константа. А в Visual Studio так нельзя. Почему так?
@@Kokurorokuko компиляторы разные
Вспомнил сейчас, что после урока с массивами я попробовал указывать размеры двумерного массива через Cin и всё получилось. Теперь узнал, что получиться не должно было. Уже 2021-й год, может какие изменения завезли, есть информация об этом?
Доп.: Вспомнил, что делал это уже после урока, да еще и на телефоне, который просил ввести числа до запуска программы, но после нажатия кнопки компиляции. Вопрос отпал.
Все правильно, так работает даже на C в старых версиях (имею ввиду указывать размеры и заполнять массиву н-мерные). Мне кажется автор просто решил так предостеречь новичков наверное, а может просто оговорился.
🧠
Как заполнить элементы массива нужными мне числами ?
Вместо rand() заполняй своими нужными.
После создания динамического массива хочу в цикле for присвоить nulptr для всех arr + i. Вижуал выдает ошибку. Почему?
А как музыка называется?
Интересно, если я например выделил размер для массива на 10, а потом изменил размер на 20, но за десятым будут чужие данные, что произойдет??
Смотря это видео, понимаю, зачем в универе у нас преподают язык Ассемблер на примере процессора Intel 8086.
Ненужная большинству фигня, мало того что большинство не понимают, так еще и времени много занимает, уж лучше бы изучали С одновременно изучаю архитектуру пк. Ну и после можно подучить язык ассемблера для дисассемблирования.
Если я создаю функцию которая возвращает динамический массив, то когда мне её нужно убивать delet-ом? в теле функции или при её вызове?
double* Gauss(...)
{
...
return x;
delete[] x; // тут?
}
int main()
{
double* x = new double[n]
x = Gauss();
delete[] x; // или тут?
}
Функцию можно организовать так, что при одном условии она создаёт массив, а при другом - убивает. Я думаю что признаком хорошего тона является создание и убивание в рамках одного объекта.
А у меня не выводится массив через массив. Беру данные одного дин. массива вставляю в другой и мне компилятор выводит мусор. Интересно почему. Вывод делаю правильно.
1.5 скорости можно смело ставить , очень медленно , на за инфу спасибо
для тебя может да, но большинству новичков надо все успевать переваривать в голове, чем не успевать обдумывать услышанную информацию
зато даже на х2 все слова разборчивы
16 ГБ ddr3 памяти это на какой платформе? Xeon?
Как DDR3 связано с Xeon? Ты аутист или да?
А у кого V.S. 2022
Можете сказать что делать если
При обращении к динамической памяти
Вызывается исключение
я вот кстати хз, но у меня компилятор сразу инициализирует массив со значением элементов 0 при интовом массиве.
версия компилятора:
`--> g++ --version
g++ (GCC) 8.2.1 20180831
Copyright (C) 2018 Free Software Foundation, Inc.
п.с. с типом дабл тожэ самое (проверил на всякий случай, не округляет ли интовый тип мусор до нуля).
По сути переменная будет инициализирована значением 0 только вне функции.
А можно ли напрямую подключиться к ячейке памяти?
Арифметика указателей урок посмотри!