Динамический массив с++ пример. Создание, заполнение, удаление, размер динамического массива. #55
HTML-код
- Опубликовано: 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 тройное прохождения С++ не помогло углубиться так. Спасибо за уроки, от тебя действительно выйдут много толковых учеников, чем у тех кто показывает о С++ в ютубе, а я их поведал не мало пока не нашел твой канал.
спасибо тебе. А то я одному дебилу объясняю, что здесь проще, а он упирается, твой коммент помог мне в решении данного вопроса, спасибо!
Очень доступно объясняешь! Всегда смотрю твои видео, если не могу вникнуть в тему, которую нам задают.
Доступно и понятно! Спасибо вам большое, что стараетесь)
7:17 - Господи, да попади уже по клавишам)
Спасибо за урок, сенсей
сорян, клавиатура под столом, печатаю в слепую =)
Продолжайте в том же духе, это весело)
Огромное спасибо за уроки, у вас талант учителя великолепный, продолжаю учиться по ним.
ОЧень хорошие уроки !!! Спасибо за Ваш труд !!!
Спасибо за уроки, все разжевано и понятно!
Прекрасно подготовлены материалы уроков и грамотно поданы, осталось только усвоить и применить ;)
Сергей, спасибо большое! Нереально круто объясняешь
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
Уважаемый Сергей, спасибо за видео!
Благодарствую.
Удачи и успехов в делах.
👍🏾
мне нравится, как в каждом уроке вы "рекламируете" предыдущий урок.
если кто-то нечаянно попадёт на 55 урок, то ему придётся пересмотреть все уроки в обратном порядке.
это такой себе рекурсивный урок. чтоб посмотреть 55ый, нужно посмотреть 54 предыдущих и вернуться на 55ый)
Вероятно один из самых удачных примеров рекурсии)
не, вначале рекурсии почти не было, где-то с 40го началась))
Благодарю за данный урок. Все достаточно информативно и просто для изучения.
Пожалуйста!
#динамическиймассив #SimpleCode #урокипрограммирования
Вау это прям совокупность всего, что проходили круто преподаешь!
Какой же вы очень хороший человек Сергей!!! Я от души благодарен за ваши уроки. Пусть всегда с вами будет счастье и здоровье и любимые люди!!!! Я понимаю что можете сказать что я вас не знаю и почему пишу что вы хороший человек? Простая логика, у плохого человека не может быть так хорошо получаться так отлично объяснять что нибудь, тем более программирование))) еще раз спасибо огромное!!!
Очень круто! Спасибо большое за такое доступное и понятное объяснение всего)
*комментарий для продвижения ролика* спасибо за уроки!
Сколь много я узнал !!! Спасибо вам большое.
Сергей - гуру!
Спасибо!
Как всегда всё супер и по порядку))) Спасибо большое
Пожалуйста! =)
Подача урока на высшем уровне, жаль мало таких людей которые от души всё объяснят и так максимально легко что даже первоклашка сразу поймет. Всем бы так научится подавать материал а то ищу про Python одни профессора блин которые думают что всё все уже знают и сходу начинают всякие приложения писать.
А Вам Сергей здоровья крепкого и успехов во всём!
Спасибо за уроки, всем кто спрашивает вас рекомендую
Классный урок, очень приятно слушать
Спасибо тебе за уроки.
Прекрасное объяснение! 🤟🤟
Очень круто и интересно!
Спасибо большое:)
Ты просто лучший!!!
Огромное спасибо вам🔥
*Большое спасибо! Очень полезное видео!*
Спасибо, очень хорошо, что недостатки плюсов показываете.
это не недостатки, это фичи))
Отличный и интересный урок
Поздоровляю с 350к просмотров)скоро милион будет)
За урок спасибо!
Спасибо за видео. Теперь я понял как работала програма для взлома игр ArtMoney :) Её нужно было указать текущее значение денег, параметров или еще чего-то численного и когда она находила нужное значение пробовала поменять его. Теперь, я думаю, смог бы написать подобную программу ;)
спасибо за урок! :)
Благодарю 🙏
Спасибо!
ты лучший
just thank you!
Спасибо
А есть тут на канале видео о циклических сдвигах в двумерных массивах? А то про сдвиги в одномерных массивах информации много, а про двумерные что-то не нахожу толкового... А вообще очень хорошо и доходчиво всё объясняется. Сергей - молодец!
that`s amazing!!!
спасибо!
Класно!
добрый день, у меня такой вопрос, пишу логику для плиточной игры на готовом движке (ue4), в проекте сделал класс инвентарь и в него добавил динамический целочисленный массив для записи Id предметов которые находятся у игрока, динамический потому, что инвентарь в процессе игры должен расширяться с уровнем игрока, в ue4 в каждом классе есть событие event tick которое вызывается каждый кадр, правильно ли я понимаю, что каждый кадр для массива будут выделяться разные ячейки памяти и выбираться такие адреса что бы мой массив поместился следуя арифметике массивов?
Если кто-то задумывался (и не знал) над тем, как работает 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церичной системе
@@arsunchik цифры это от 0 до 9
@@user-vo4en4xf3g по твоему F это не цифра в 16ричной системе счисления?)
@@arsunchik я тебе про 10-тичную говорю
@@arsunchikчел просто хотел помочь, а ты нашёл совсем безобидную ошибку и говоришь об этом, это говорит о том, что у тебя самооценка низкая
Сергей, здравствуйте! Спасибо за подробный рассказ. ПОдскажите как удалить часть массива, тем самым уменьшить его длину?
19:20, данные, которые лежат в этой ячейке принадлежат только этой программе и этому процессу, если бы это был кусочек видео из бандикама, то операционная система бы немедленно закрыла процесс из-за того, что она пытается достучаться к участку памяти, не принадлежащему ее процессу. Так что там лежат данные только этого процесса, ничто другое быть не может.
@Mimyagu artmoney получает так называемый handler процесса, через который и модифицирует данные оперативной памяти процесса и операционная система уже не считает это вмешательство «нелегальным»
спасибо
Спасибо с Украины) Лайк
И я Украинский ЛАЙК жмакаю после каждого видео на своих 2-х аккаунтах !!!
В matlab все объекты динамические и там была команда pack. В си были функции mark и relese , что посоветуете в cpp?
Можно вопрос: динамическая память для массива еще актуальна? у меня компилятор не ругается на такое:
int n;
cin >> n;
int a[n];
тем более есть просто vector
удоляй свой моссив, удоляй сказал, он динамический 💣
05:29 - массив это непрерывная область памяти
13:23 - обязательно условие: чтобы в оперативной памяти было свободный непрерывный участок памяти
13:56 - в отладчике мы сможем увидеть только самый первый элемент
Массив - это тип данных. В отладчике вы можете увидеть не только самый первый элемент, но и весь массив целиком, при желании.
Нет в языках С/С++ типа данных «массив». Массив - это просто указатель на кусок памяти.
Вопрос, вы хотите сказать что система при выделении динамической памяти не контролирует выход за нее ?
А не подскажите, почему в xcode в статическом массиве, когда задаем ему размерность можно отбросить const?
16 ГБ ddr3 памяти это на какой платформе? Xeon?
Вспомнил сейчас, что после урока с массивами я попробовал указывать размеры двумерного массива через Cin и всё получилось. Теперь узнал, что получиться не должно было. Уже 2021-й год, может какие изменения завезли, есть информация об этом?
Доп.: Вспомнил, что делал это уже после урока, да еще и на телефоне, который просил ввести числа до запуска программы, но после нажатия кнопки компиляции. Вопрос отпал.
А чистить данные в ячейках массива через null или nullptr здесь ненужно, как в случае с обычными данными?
тоже интересно
Напишите, пожалуйста, если вы нашли ответ на вопрос
@@Kokurorokuko Напишите, пожалуйста, если вы нашли ответ на вопрос
@@crackall1946 имеет смысл установить в nullptr только сам указатель на массив (т.е. arr = nullptr)
@@leshiyni давно уже рашил этот вопрос. У меня плкйлист к концу подходит
Спасибо, я больше не буду издеваться над памятью моего компа...
Уважаемый Сергей!Если вы увидите ответьте пожалуйста!Во первых спасибо вам большое за эти уроки!Дошел вот 67 видео очень многое узнал,сам учусь в университете в Турции,благодаря вам я даже впереди того что обучают!!Вы дойстойны уважение!!Хотел у вас спросить на счет этой темы,вот у меня выходят разные числа в массиве да,но адреса одни и те же,это нормально?заранее благодарю!
Как в Турции образование? На кого конкретно учитесь?
лукас)
Здравствуйте, Сергей. Будут ли бинарные деревья рассматриваться в дальнейшем?
Будут.
Я делаю так же как и вы показывали. Выделяю под массив память, оперирую этими элементами и в конце очищаю выделеную память по указателю. Но что бы убедиться в очищености выделеной памяти я снова выводил эти же элементы и у меня выводило в консоль что очистился первый элемент а остальные сохранили свои значения (не очистились). Подскажи пожалуста.
👍👍👍
Уважаемый Сергей ты можешь сделать рубрику где вы будете отправлять исходники с ошибками а мы будем их
исправлять
нет, такого не будет.
это глупо
7:11, боль
Скажите пожалуста как создать динамический масив, если размер будет постоянно менятся.
В векторах я могу использовать команду название_вектора.push_back(значение). Как это сделать с динамическим масивом? Я понимаю, что это уроки на с++, но мне нужен ответ на вопрос на язике с. Заранее спасибо.
Вопрос, нужно ли при работе с массивом стирать данные из указателя или нет?
Напишите, пожалуйста, если вы нашли ответ на вопрос
стирать адресс указателя вообще не обязательно в любом случае(операционная система сама стек чистит закрывая программу). Это делается ради удобства и для того, чтобы случайно не зацепить чужие данные
Какую комбинацию клавиш Вы используете для создания конструкции цикла for ?
пишем for потом нажимаем TAB;
спасибо)
Интересно, если я например выделил размер для массива на 10, а потом изменил размер на 20, но за десятым будут чужие данные, что произойдет??
7:09 ой ржунимагу
произошла драка с
клавиатурой
Нельзя получить чужие данные, только данные, которые относятся к процессу
почему у меня при таком же коде, как на видео, адрес ячеек динамического массива одинаковый? а на видео с шагом в 4 байта?
А как музыка называется?
А у меня не выводится массив через массив. Беру данные одного дин. массива вставляю в другой и мне компилятор выводит мусор. Интересно почему. Вывод делаю правильно.
После создания динамического массива хочу в цикле for присвоить nulptr для всех arr + i. Вижуал выдает ошибку. Почему?
Смотря это видео, понимаю, зачем в универе у нас преподают язык Ассемблер на примере процессора Intel 8086.
Спасибо большое за урок, все очень понятно кроме одного момента. Почему всё-таки необязательно писать const у переменной size. Понятно что это с помощью new как-то работает, но как именно. Урок про new и delete смотрела все равно не поняла этот момент
если зададим константу для сайза, то нельзя будет менять его значение вводом любого числа, и на выходе получим обычный статический массив
Почему компилятор в записи int *arr = new int [size] перемещает значок звездочки к int? То есть получается так:
int* arr = new int [size]. У Вас так не происходит.
А я всегда пишу int*, а нет int *. Так более понятнее. И для себя я понимаю, что указатель типа int. А когда *на, то это уже само значение, которое лежит в ячейке памяти
Если я создаю функцию которая возвращает динамический массив, то когда мне её нужно убивать delet-ом? в теле функции или при её вызове?
double* Gauss(...)
{
...
return x;
delete[] x; // тут?
}
int main()
{
double* x = new double[n]
x = Gauss();
delete[] x; // или тут?
}
Функцию можно организовать так, что при одном условии она создаёт массив, а при другом - убивает. Я думаю что признаком хорошего тона является создание и убивание в рамках одного объекта.
И да, я попробовал создать массив до ввода его размера, выдало ошибку - Коррупция кучи. и программа упала. Так что, на заметку возьмите.
Чем вектор от динамического массива отличается?
Вектор - шаблон класса. Дин. массив - это объект, который расположенный в дин. области памяти.
Память не нагрузилась, а вот проц сразу наполовину и на буст частоты полетел)))
Ввела 999999 по такому же принципу, но максимум до ~5800 доходит. Далее прога останавливается
А можно ли напрямую подключиться к ячейке памяти?
Арифметика указателей урок посмотри!
я вот кстати хз, но у меня компилятор сразу инициализирует массив со значением элементов 0 при интовом массиве.
версия компилятора:
`--> g++ --version
g++ (GCC) 8.2.1 20180831
Copyright (C) 2018 Free Software Foundation, Inc.
п.с. с типом дабл тожэ самое (проверил на всякий случай, не округляет ли интовый тип мусор до нуля).
По сути переменная будет инициализирована значением 0 только вне функции.
16:20
кусочек бандикама😂😂
Здравствуйте!Если я создам динамический массив в одной функции и попытаюсь удалить его в другой функции,возможно ли это?
Нет. Насколько мне известно, другая функция не будет знать о его существовании.
Возможно, если известен адрес, где он лежит (указатель на него). Вся фишка заключается в том, чтобы сохранить адрес - если его потерять, то освободить память уже не получится.
@@AV1ch Да, я уже понял
@@AV1ch Да, я уже понял