Итераторы STL | Библиотека стандартных шаблонов (stl) | Уроки | C++ | #2
HTML-код
- Опубликовано: 27 ноя 2024
- Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)
Арифметика указателей. Указатели и массивы. Массив это указатель. C++ для начинающих. Урок #47
goo.gl/uP9Aez
Умные указатели. Smart pointers. Изучение С++ для начинающих. Урок #130
goo.gl/yAh6Br
Наследование в ООП пример. Что такое наследование. Для чего нужно наследование классов. ООП. C++ #98
goo.gl/xgR75E
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=)
🔴🔴🔴 www.donationale...
или тут
🔴🔴🔴 / simplecode
✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit
*Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*
Этот канал просто золотая находка для любого, кто изучает программирование.
Крутые, подробные и понятные объяснения.
Не понимаю, почему у некоторых посредственных ютуберов, которые обучают программированию, невероятно большая аудитория, а этого канала так мало - несправедливо
Благодарю за поддержку!
Недавно наткнулся на канал, подписался после 2 урока.
Такого полезного контента по C++ я ещё не встречал.
Автору огромное Спасибо!
Пожалуйста!
Спасибо Сергей продолжайте в том же духе ваши уроки на вес золота 🥇.
Пожалуйста!
Не торопитесь пожалуйста переходить на c# а доучите нас до конца то есть что вы запланировали на c++ (хотелось бы и затронуть оконные приложения на c++ так же подробно)
Обычно их не на с++ делают, а на си шарп. Но тоже хотелось бы глянуть гайд=)
А зачем вообще их совмещать? .NET вполне себе самодостаточная платформа.
Огромное спасибо за уроки! Отличная подача материала.
Заметил, что в плейлисте "Основы C++. Программирование для начинающих" этот урок стоит после урока по списку и после урока по ключевому слову auto, где уже активно упоминаются итераторы.
Спасибо, лучший канал по С++ и по программированию в целом!!
Огромное спасибо за Ваш труд! Благодаря вашему каналу смог начать изучать С++ самостоятельно и спустя некоторое время даже нашёл работу)
только С++ достаточно бьіло?
@@dentuso8 я при университете работаю, поэтому не требуется огромных знаний, хватило С++
@@IvanBaksheev Хотелось бы узнать, не сложно ли учиться и работать одновременно?
@@cnota69 вполне терпимо, если грамотно планировать время)
Урок отличный! Продолжайте, это замечательно когда есть такие уроки.
STL уроки очень интересные , сразу чуствую , другой уровень уже :)!!!
наверно самый масштабный видеоуроки по с++ не с++ за час
гоша дударь аКа Всезнающий в шоке, ТАК МОЖНО ЧТО ЛИ БЫЛО???))
@@KK-gg8sk Ахахахах))))
спасибо Сергей за отличный урок, очень интересно, при просмотре не возможно остановиться))
Спасибо за бесценный труд!)
Самое понятное объяснение которое я нашел,спасибо лайк ставлю подписываюсь однозначно!
Хорошо раскрыта тема, спасибо!
Спасибо Вам большое! Все доступно и понятно!)))
Спасибо за урок, уважаемый Сергей.
Спасибо большое, доступно и понятно, хорошо объясняете есть последовательность в объяснении
Пожалуйста!
Это очень полезная тема для того чтобы работать со строками (string) на максималках
Отличные уроки... Спасибо!
Спасибо. Очень крутые уроки, изучаю с удовольствием!
#итераторы #STL #SimpleCode #урокипрограммирования
Зачем нужны итераторы, если есть указатели и арифметика указателей ?
Спасибо!
Щиро дякую!
Спасибо! Отличные уроки!
спасибо брат очень бесценные уроки
Пожалуйста!
Спасибо за урок.
великолепный урок! благодарю! лайк
Спасибо за урок. Теперь понял, что при доступе к элементам контейнера через цикл for в его описании за ключевым словом auto скрывается объявление итератора. На других каналах этому внимания не уделяется, а для новичков такие вещи как раз важны.
Хорош!! Давай-давай вперёд! Контент в кайф! Можно ещё? Вообще красавчик!!
Отличные видео!
Отличный урок!
159й урок. Еще немного и финал. Урааа!!!
Да неплохо
Отлично@krazly677
Огромное спасибо за эту уроки !!!!!
Класс! Спасибо за урок!
Спасибо вам огромное за уроки!!!
будут ли про паттерны проектирования на c++?
Так, а "итератор" чем вам не паттерн?
@@princessmary5556 я думаю, этот человек имел в виду именно GoF
@@Valiazerdes И часто вы вот так домысливаете за других? Вопрос риторический.
Спасибо за качественный контент
Огромное спасибо!
As usual, like it!
Благодарю!
Очень много информации, но урок очень полезный!!
Спасибо, хорошие уроки, как всегда)))
Спасибо за труды
Спасибо, удачи в продвижении канала, симуляция вируса мне понравилась)
Сергей, скажите, а паттерны собираетесь объяснять?
Как жизнь, Бро?
Спасибо за урок
Спасибо огромное!)
Большое Спасибо)
Спасибо большое
Девушка которая играет в роблокс изучает с++? ого
Super!) Thank you
Спасибо вам Махмод Саборжанович Йсламбиков
Оператор "квадратные скобочки" почему так угарно звучит)))
Оператор индексации]]]
Здравствуйте, Сергей! Один вопрос, а за сколько вы выучили с++ и как эффективно обучаться, по вашему методу? И спасибо за урок!
Overdoses подозреваю, что Сергей до сих пор учит с++))). Язык настолько объёмный, что нужны годы практики на его изучение. По поводу изучения языка по видеоурокам, то на своём опыте скажу, что без регулярной практики всё забывается. Год уже как учу шарпы и о итераторах приза был.
тож, на пример всё ясно, а заходишь в компилятор и не можешь реализовать
после такого придется подписаться
Интересная хрень:: когда тренировался с итераторами, решил изменить capasity на векторе, так вот итератор не переопределился на новый вектор .... наверное не существует механизма для этого в принципе. Ещё: если использовать метод insert(it,number) и после этого продолжить работу с итератором it advance(it, 4) или mas.erace(it), то нихрена не выйдет, ... даже если выкрутить capasity, т.е. сам итератор ломается.
Это достаточно легко объясняется. Изменение capacity связано с переаллокацией буфера, т.е. вектор начинает располагаться в другом участке памяти. А вот итераторы продолжают указывать на старые ячейки, в которых лежат уже не принадлежащие нам данные. В случае метода insert, новый элемент вставляется перед тем, на который итератор указывал, соответственно данные итератор теперь не корректны. Примечательно так же, что неправильными становятся и все итераторы, указывавшие на эл-ты следующие за вставленным(т.к. их делегаты сдвинулись).
Спасииибо :333
подсел на видео автора ))
не могу понять, как закомментировать выделенные строки. При комбинации клавиш Ctrl+K или Ctrl+U появляются лишь какие-то флажки возле строки
спасибо
можно еще вот так делать
MyVector.insert(it+3, 999);
не писать -> advance(it, 3);
Хм.. не нарушится ли логика, если контейнер будет, например, не интовым? Возможно ли будет делать инкримент для какого-либо другого типа данных? Т.е., даже если мы все int заменим на string, а потом в цикле for будем делать инкримент для нашего счётчика, удастся ли это? Не вылезет ли каких-то подводных камней?) Или в данном случае лучше будет использовать метод advance (и, если да, то какой параметр нужно будет передавать во втором параметре)?
Изменение типа данных учитывается.
А будут уроки по OpenGL?
😊☝👍👍👍👍
Сергей, спасибо за урок! Как всегда очень познавательно!
Вопрос: если использовать Vector, не со встроенными типа, а пользовательскими, то почему в процессе работы Vector'а вызываются дополнительные деструкторы пользовательского типа с непонятными адресами (конструкторов с этими адресами не было)?
что значит деструкторы с непонятными адресами?
вызываться деструкторы будут при добавлении в вектор новых элементов, если в нем закончилось место. при этом все элементы которые там уже были будут перемещены/скопированы и на старых местах удалены деструктором пользовательского класса, собственно вот он и вызывается
у меня в голове каша, может кто поможет, класс iterator унаследован от класса const_iterator (как говорится в видео) или всё же наоборот и автор просто ошибся? а то получается что методы класса-наследника применимы к объектам базового класса (голова сейчас треснет), где я запутался?
Вам следовало бы раньше рассказать про тип auto, которым можно было им заменять эту длиннющую запись vector::iterator :)
На языке с++ не существует типа auto. Ключевое слово auto, так и называется "keyword auto". Это никакой не тип.
проста класс
даже так работает
vector myVector = { 12,232,323,231 };
vector::iterator it= myVector.begin();
for(int i=0; i
Можно, конечно и так, но лучше вот так:
vector myVector = { 12,232,323,231 };
for (auto it=myVector.bebgin();it!=MyVector.end();++it)
cout
а как допустим применить функцию к объекту листа, вот допустим у меня содержатся в листе объекты класса персонажа, у которого есть функция движения, через массив можно написать arr[i].func(); а как в листе это сделать?
Dėkui
Добрый день! Не могу разобраться, возможно ли в vector записать информацию через cin ?
можно вот так- > MyVector.insert(it+3, 999);
не писать -> advance(it, 3);
14:28, Но при этом iterator = vector.end() будет указывать на последний элемент вектора
ну вообще то там нет присваивания
На самом деле этот итератор указывает не на последний элемент вектора, а на элемент за его пределом. Поэтому разыменовывать такой итератор нельзя. Поэтому там используется условие не равно !=
Просто операторы по-разному описаны
Вы пишите: *iterator = vector.end() будет указывать на последний элемент вектора* Нет, не будет. Не путайте итератор на последний элемент (rbegin) с итератором, который указывает позицию, за последним элементом (end)
Как const iterator i являясь константным будет увеличиваться в цикле for c помощью инкримента i++ ? Я не понял.
Дело в том, что инкримент не увеличивает сам итератор, а только меняет его позицию на +1
@@Elemtro_Hiro я уже не помню своего вопроса
@@Elemtro_Hiro выходит, несмотря на то что const_iterator... const, он всё равно позволяет работать с его позицией (изменять это значение), а const накладывается именно на доступ к данным контейнера через этот итератор
Вопрос знатокам, почему я выдает ошибку, если хочу сделать insert 2 раза подряд
vector::iterator it = myVector4.begin();
myVector4.insert(it+3, 999);
myVector4.insert(it, 1999);
в окне ошибки написано что-то вроде "iterator outside range".
Вы итератор типа int пытаетесь сдвинуть на число типа flot или double
Если же у вас итератор типа flot или double, то он не подходит к вашему вектору, так как vector у вас имеет тип int
> 3:10 имя массива - єто указатель на его первый элемент
а разве не ссылка (&) ?
П.С. до сих пор путаюсь с & и * в С\С++
> 15:00
можно ли в цикле for написать как условие итератор i != NULL ? (типа как аналогия с указателями != nil)
Имя массива - это просто имя массива. К указателям не имеет никакого отношения. Вообще, даже просто формулировка некорректна из-за своей двусмысленности. Здесь будет уместна цитата Страуструпа:
Имя обозначает (денотирует) объект, функцию, тип, значение или метку. Имя вводится в программе описанием (#8). Имя может использоваться только внутри области текста программы, называемой его областью видимости. Имя имеет тип, определяющий его использование. Объект - это область памяти. Объект имеет класс памяти, определяющий его время жизни. Смысл значения, обнаруженного в объекте, определяется типом имени, использованного для доступа к нему.
(ц) Страуструп
Жалко что не рассмотрены двумерные вектора
Здравствуйте , Сергей , вы сказали , что к элементам вектора можно обращаться через operator[] , но вот не задача , clang-tidy эту операцию очень ругает .
Допустим у меня есть вектор пустой , и дальше его надо заполнить с клавиатуры for (int i = 0 ; i
Если у тебя вектор пустой то к нему нельзя обращаться через скобки, пытаясь добавить новый элемент тк получаешь ошибку сегментации памяти. Используй push_back (). Тут никакие итераторы не нужны.
Как вывести значение итератора в textbox?
У меня вопрос , myVector.end указывает на запасное место?
На место, которое располагается сразу за последним элементом. Это не "запасное место". Это вообще уже "чужая память". Поэтому, к этой памяти нельзя обращаться.
Работаю через VS2019 и при попытке выполнить код на 19:39 ( cbegin() и cend() ) получаею ошибку С2039. Почему так и как решить?
Разобрался.
Когда я просто приписал "с" к методам, следуя указаниям автора, то компилятор выдавал ошибку. Но когда я стер метод и написал его заново, ошибка пропала... Сначала выпал в осадок от такой ситуации, а потом случайно заметил, что при приписывании "с" методам я использовал кириллицу :) Совсем забыл, что для компилятора с на кириллице и на латинице - это разные символы.
@@viktor65366 😶... bro
я 35 600 просмотр
IiIukarno
не удобны, эти ваши, итераторы... Индексы, как числа, своим видом в процессе чтения кода несут информацию, а итератор это литерал и на какой именно он элемент указывает просто из одной строчки кода понять будет нелегко, придётся "рыть" вглубь.
мне тоже так кажется, непонятно существование этих итераторов... По крайней мере, если в конкретном случае можно реализовать массивом.
@@GorgeousPuree итератор - паттерн, смысл которого: один и тот же код может пробежаться по элементам самых разных контейнеров, ничего не зная о деталях реализации их устройства. Другими словами, область примененеия итераторов - обобщенный код; ситуации, когда отсутствует конкретика, и заранее не известно, что именно прилетит в функцию: массив, или какой нибудь std::list, например.
Спасибо за урок.
Пожалуйста!
Спасибо!!!
спасибо
Спасибо за урок.
Спасибо!
спасибо
Спасибо
спасибо