На этом канале автор изучает язык программирования С++, занимается по книгам разных авторов и добавляет свои видео в плейлисты, чтобы тем, кому интересно программирование, могли вместе с автором пытаться изучать языки программирования, структуры данных, алгоритмы и всё прекрасное, что имеет отношение к программированию. Подписывайтесь на канал, если Вы так же, как и автор, "заболели" программированием :)
Из мейна вызывается функция А -> далее создается два объекта и вызывается функция В-> создается два объекта и встречает генерацию исключение, после чего начинает искать ближайший блок кетч, то есть возвращаемся в функцию А и начинаем выполнять блок кетч, в котором на место переменной ехп пишем "лови меня" и далее по списку. После , если второй троу не раскоментирован, возвращаемся в мейн и завершаем работу. Если троу в функции А раскоментирован, возвращаемся в мейн и там ищем и выполняем блок кетч, пишем лови меня! после чего завершаем работу.
В книжке таки хотели продемонстрировать char. Надо const добавить в строчку catch(const char* exp). Опечатка, одна из многих. Да, ИИ от мелкомягких работает, в отличи от Алисы. ) В дальнейших листингах будет и этот код.
Тот случай, когда не старался но очень полезно. :) Ответ на упражнение из подсказок в книжке не работает, выбивает ошибку предиката. Ранее удавалось отловить опечатки и исправить код работал, на этом упражнении у меня не получилось понять почему. Объяснение автора к стати ясности не добавляет, но хоть работает. Исправил унарный предикат Рао по принципу предиката из видео - работает. То есть унарный предикат оператора (<) в членах класса Person.
Не поленился, переписал с правками (дата открытия, по ней и сортируем) у себя этот листинг. В общем делаем лямбду сортировки в алгоритме сорт с открытием (либо прописываем в публик доступ - возврат, или вообще структуру - не суть) поля по которому сортируем. Способ с друзиЯми не понравился. Использование ostream есть в книге, демонстрация правда косвенная.
resize - изменяет size вектора.Тоесть количество хранимых объектов.reserve - изменяет вместимость (capacity) вектора, те не сколько там сейчас объектов, а сколько в вектор может ханить обхектов до того, как произойдет реалокация вектора. Когда количество хранимых обектов станет равным вместимости вектора (size== capacity) вектор будет реалоцирован - будет выделен новвый буфер бОльшего размера и все значения будут из старого буфера перемещены \ скопированы в новый буфер, а старый буфер будет удален.Буфер тут это просто массив в диманмической памяти. Если сделать resize(5), а потом делать пушбеки - эти первые пять значений будут дефолтными (нулями например), а запушенные объекты будут добавлятся в конец в 6-ю 7-ю итд позицию.Те будут происходить реалокации. Если сделать reserve(5) то первые 5 объектов будут рзамещены в этой памяти реалокаций не будет. Как оптимизировать? Вставка в лист очень быстрая.Просто добавляется еще один указатель без реалокаций и копирований как в векторе не будет. Чтобы оптимизировать нужно было СРАЗУ вставлять объекты в лист.Либо если кол-во хранимых объектов известно заране использовать reserve и вектор.Либо использовать resize но вставлять элементы по индексам взмен дефолтных значений. Чтобы подогнать вместимость вектора (capacity) к его размеру (size) используется метод shirink_to_fit
const после аргументов означает что this константный.Это означает, что эта функция-член класса (метод) не меняет состояние объекта класса.Во все методы класса неявно первым аргументом передается указательл на текущий объект - this. Если у метода в конце есть const то передается не просто this , а const this. this - буквально значит "этот".Те тот у которого вывзывается метод.Те объект перед точкой.Например std::string str; str.size(). Сайз получит (неявно) первым аргументом указатель на строку str а const std::string name; name.size() - тут метод сайз получит первым аргументом (неявно) const this и если бы у метда size не было бы const в конце, то для строки name его было бы ЗАПРЕЩЕНО вызывать так как не выполнялась бы гарантия, что size не изменит состояния строки name.ЕСЛИ МЕТОД НЕ МЕНЯЕТ СОСТОЯНИЯ ОБЪЕКТА ОН ДОЛЖЕТ ИМЕТЬ CONST после скобок с параметрами. Вот перегруженный оператор сравнения.Мы передаем как аргумент другой объект по константной ссылке а конст в конце функции члена озанчает, что и объект на котором мы вызываем (this) тоже константный. Если бы не было const в конце, то мы бы не смогли сранивать объекты объявленые константными тк не было бы гарантии что оператор сравнения не изменит текущий объект (this). Легко это предстаить если у вас есть свободная функция (не метод класса) сравнивающая два контакта.Вы ведь оба передадите их по константной ссылке.(Их же просто нужно и сравнить).Ну вот в методе класса this явно не передается а константность настраиваетя этим самым "вторым" const
Как бы вывод результата выражения, без добавления значения, то есть изменения значений в ячейках в контейнера. Проверки в ответах не помешает. Разница правда, минимальная: a+= var_plus и отдельный вывод контейнера на экран.
То есть даже шанса не дал Евгению объяснить, как работает структура на месте ключа в классе мап. Жаль. Сильно подозреваю что в ответе на 2 упражнение опечатка. В описании пользовательского предиката используется оператор () и упоминается что другие операторы не используются. В ответе используется оператор <. Такая история.
Сортировка при вставке влияет на дальнейшее поведение, в частности на поиск. В сете тоже самое. В упражнении если отсортировать по номеру телефона, поиск по имени не даст ничего даже если определить оператор == в классе по имени в ручную.
std::value_type - это функция-итератор, которая используется для определения типа значения, связанного с итератором. Она возвращает тип объекта, который будет возвращён при разыменовании итератора. std::value_type применяется в случаях, когда необходимо узнать тип значения, возвращаемого при обращении к итератору.
В контейнер типа инит вставишь тип интит. В контейнер типа словарь нужно вставлять данные типа словарь. К стати наглядное не явное преобразование типа стринг в тип словарь. )
измени if на while и делай пуш прямо в лист в цикле убрав for вообще. ресайзом ты делал интересное: Метод класса vector resize() используется для изменения размера вектора. Он имеет две формы: resize(n): оставляет в векторе n первых элементов. Если вектор содержит больше элементов, то его размер усекается до n элементов. Если размер вектора меньше n, то добавляются недостающие элементы и инициализируются значением по умолчанию. resize(n, value): также оставляет в векторе n первых элементов. Если размер вектора меньше n, то добавляются недостающие элементы со значением value. Применение функции: std::vector<int> numbers1 { 1, 2, 3, 4, 5, 6 }; numbers1.resize(4); // оставляем первые четыре элемента - numbers1 = {1, 2, 3, 4} numbers1.resize(6, 8); // numbers1 = {1, 2, 3, 4, 8, 8} Важно учитывать, что применение функции resize может сделать некорректными все итераторы, указатели и ссылки на элементы.
Ответ Алисы на первый вопрос: Класс List предоставляет функции-члены sort() и remove(), чтобы облегчить работу с данными и обеспечить гибкость в манипулировании списками. Эти функции позволяют сортировать элементы списка в определённом порядке и удалять элементы из списка соответственно.
Чтобы меньше весил. На каждом элементе на одну ссылку меньше. Есть лист форвард есть лист васк. В маленьком занятии - обзоре контейнеров это упоминается.
cin - присваивает до пробела, одно слово. getline - в представленном виде присваивает стрингу всю написанную строчку, включая пробелы. % - остаток от деления то есть четные не четные. увеличили нечетные. я просто шаг в два в цикл прописал for(... i=0 ... I+=2)
Канеш поздно, но на моменте 26:20 там +1 и -1 не потому что: ну это массив, сами понимаете, а для того чтобы не учитывать крайние значения, с которыми уже было сравнение
Fish* pFish = new Tuna; Tuna* pTuna = pFish ; Произошла дидактика. За ради демонстрации, два объекта одного класса одинаково похожи друг на друга и приведены к указателю типа Tuna.
Да в общем то общем смог. Я то просто переписал ответ, лень копипастить было. Реализация преобразования из книжки понравилась: operator int(){return((year*10000)+(month*100)+(day));} Запомнил как алгоритм.
Читая эту книгу появляется впечатление что автор заваливаем читателя кучей терминов которые только усложняют понимание того как это работает на самом деле. Проще показать что такое функция схематически, показать что она может принимать аргументы, показать как с одной функции вызывается другая и выполняет каки-то действия. На этом для начала достаточно, вы точно будете понимать как это работает. Уверен что посмотрев эти ролики 99% новичков даже не поняли зачем нужно пространство имён. Странная книга не знаю почему все ее рекомендуют.