C++ Lectures at MIPT (in Russian). Lecture 1. Strings.

Поділитися
Вставка
  • Опубліковано 18 гру 2024

КОМЕНТАРІ •

  • @meshcheriakov
    @meshcheriakov 3 роки тому +12

    Невероятно талантливая и мастерская подача. Очень интересно смотреть и "учавствовать".

  • @JohnWickMovie
    @JohnWickMovie 3 роки тому +4

    Спасибо за лекцию

  • @strakhov
    @strakhov 2 роки тому +6

    Невероятно крутые лекции, спасибо вам!

  • @demon4ort18
    @demon4ort18 3 роки тому +3

    Посмотрел на одном дыхании, спасибо за лекцию!

  • @tilir
    @tilir  4 роки тому +20

    Этому магистерскому курсу логически предшествует базовый, бакалаврский. Может быть вы хотите начать с него: ua-cam.com/play/PL3BR09unfgciJ1_K_E914nohpiOiHnpsK.html

  • @mikhailizvin5123
    @mikhailizvin5123 3 роки тому +1

    Один магистрант == одна проблема. (8:23)
    Все таки лекторы умеют тонко пошутить над слушателями.
    А так спасибо за материал.

  • @iraboguslavsky1949
    @iraboguslavsky1949 3 роки тому +2

    Необыкновенно интересная лекция! Спасибо большое!

  • @gacha-somi
    @gacha-somi 2 роки тому

    Просто проходил мимо, в итоге посмотрел всю лекцию, очень интересно, спасибо!
    Я бы добавил к информации о важное замечание, что строка, на которою она указывает, не заканчивается '\0' (валидным считается диапазон [data(); data() + size()) ), поэтому не стоит использовать её метод () так же как () у , передавая её в функции, который ожидают строки, оканчивающиеся на '\0'.Так же при объявлении параметров функций рекомендуют передавать без const &, просто как .

  • @IK-ow2zk
    @IK-ow2zk 3 роки тому +1

    Спасибо за лекцию, очень интересно!

  • @СергейНикитин-т9ж
    @СергейНикитин-т9ж 3 роки тому +1

    Спасибо, весьма познавательно и полезно!

  • @ДмитрийСадков-е8ц
    @ДмитрийСадков-е8ц 2 роки тому +1

    Константин, пара микро-опечаток на слайдах 7 и 8.
    В коде используются строки "Hello, world" без восклицательного знака в конце, а на иллюстрациях в конце строк восклицательный знак есть.

  • @AlexKeyMAD
    @AlexKeyMAD 3 роки тому

    Очень интересно, спасибо!

  • @PetrPss
    @PetrPss 3 роки тому

    1:12:40 - "SZ = (sizeof(data) + 2*sizeof(size_t) + 31) / 32;"
    По идее же должно как-то зависеть и от sizeof(CharT) ?

    • @tilir
      @tilir  3 роки тому

      Конечно вы правы, нужно выравнивать по sizeof(CharT), а не по 32 и потом ещё делить общее место на этот размер чтобы получить кол-во элементов в массиве и т.д. Итоговое вычисление будет страшноватым, можете заглянуть в реализацию в libc++.
      Но я немного сэкономил место в строчке на слайде, чтобы был ясен общий принцип.

    • @samolisov
      @samolisov 3 роки тому

      Я довольно надолго залип на этом слайде потому что нутром чувствую, что литр, а доказать не могу. Прежде всего непонятно, зачем здесь sizeof(data) + один sizeof(size_t), т.к.указатель на данные и размер уже есть и в обычной, и в sso-шной строке, т.е. вне юниона. Потом только в комментариях нашел, что это неполный код.

  • @iqfunru
    @iqfunru Місяць тому +1

    Вопрос к Константину: этот плейлист (C++ Lectures at MIPT (in Russian)) стоит скачивать, если я уже скачал плейлист "C++ базовый курс, MIPT, 2021-2022" (магистерский курс тоже скачал)?

    • @tilir
      @tilir  Місяць тому +1

      Нет это легаси. Новый магистерский его суперсетит.

  • @dimhazel
    @dimhazel 5 років тому +3

    Я все еще не согласен, что const char* можно присвоить к char*, мы тогда потеряем константность данных, это не то же, что const int присвоить int-у, последнему эквивалентно [char*] = [char* const].

    • @tilir
      @tilir  5 років тому

      Это уже есть в errata, см. описание видео. Найди что нибудь ещё.

  • @НикитаЧернецов-с5й
    @НикитаЧернецов-с5й 4 роки тому +1

    В примере с " trim me " опечатка, удаляется слишком много в конце, и получается "trim m". Должно быть:
    vtrim.remove_suffix(vtrim.size() - min(trimlst, vtrim.size()) - 1);

    • @tilir
      @tilir  4 роки тому

      Согласен. Годболт тоже за: godbolt.org/z/sMv948
      Забавно что это нашлось больше чем через год =) Добавил в errata

  • @xsomniator
    @xsomniator Рік тому

    А что если константные строки сделать ref-counting, а мутабельные - как std::string? В мутабельных строках заодно можно увеличить буфер для small string optimization на размер счетчика ссылок. Наверняка такое уже где-то реализовано.

    • @tilir
      @tilir  Рік тому

      В идеологии C++ объект во время конструирования и большинства операций над ним не должен знать создают его мутабельным или нет.
      Ваше предложение можно доработать до shared_ptr который почти точно соответствует иммутабельному COW-объекту T, но там вылезут свои побочки.

  • @Григорий-т2б
    @Григорий-т2б 3 роки тому

    Константин, здравствуйте !
    -*- -*- -*- вопрос -*- -*- -*-
    Корректно ли работать дальше с представлением строки (std::string_view) если const char * был возвращён из функции например?
    Ведь будет совершенно корректно записать std::string_view str{"const_char_*"};
    -*- -*- -*- код -*- -*- -*-
    const char *getStr() {
    return "const_char_*";
    }
    int main(int, char **) {
    std::string_view str{getStr()};
    std::cout

    • @tilir
      @tilir  3 роки тому +1

      Этот вопрос интересней чем кажется, так как на самом деле вы спрашиваете какое строковые литералы имеют время жизни. Короткий ответ: достаточное (а конкретно static storage duration). У вас всё будет работать, конкретный пункт стандарта можете найти самостоятельно =)

    • @Григорий-т2б
      @Григорий-т2б 3 роки тому

      @@tilir наверное поэтому строковый литералы это lvalue

  • @test_bot5541
    @test_bot5541 3 роки тому

    Интересно было бы узнать:
    1. По какому алгоритму вычисляется ёмкость строки, если заранее известен её размер (с сервака, скажем, прилетел, перед тем как прилетела сама строка)? Т.е. как сперва вычислить какой будет capacity, а потом решать, помещать String в мою маленькую, почти переполненную кучу, или лучше пока воздержаться\воспользоваться Си-строкой\сказать серваку, чтоб прислал только кусочек и т.д.
    2. Сколько по умолчанию отъедает новый capacity, если предыдущий превышен? Под строку в куче выделяется новая память с переносом всей строки или может она там как-то фрагментируется, в виде двусвязного списка или xз как еще?
    А за лекцию автору спасибо. Для начинающих в C++ самое оно.

    • @tilir
      @tilir  3 роки тому +1

      Почитайте про амортизированную сложность и про то как должен расти capacity чтобы вставка элемента в конец была O(1+). Если коротко: то нужно всегда удваивать.
      Лекция как и весь курс ни разу не для начинающих. Для начинающих начну выкладку со след. недели.

  • @Electronix1000
    @Electronix1000 4 роки тому +3

    Спасибо, Константин! А как посмотреть предыдущие лекции?

    • @tilir
      @tilir  4 роки тому +2

      Я пока что выложил только магистерский курс. Предшествующий ему бакалаврский курс я конечно в своё время тоже запишу и выложу на этот канал, но вообще базовых курсов C++ в интернете много...

    • @konstantinmorozov6453
      @konstantinmorozov6453 4 роки тому +1

      @@tilir а случайно не планируете курсы по ассемблеру или ОС выложить?)

  • @misana77
    @misana77 4 роки тому

    9:26 - этот код не скомпилируется в ISO С++, так как возвращаемый тип malloc - void*, то его надо явно скастить к типу char*. В Си не надо.
    godbolt.org/z/c2eQDf

    • @kostikvl
      @kostikvl 4 роки тому +1

      Он не скомпилируется не только поэтому ) Даже если считать, что на слайде сишный код, там всё равно масса кровоточащих проблем. Это не случайно.

  • @uvash4611
    @uvash4611 3 роки тому +2

    Спасибо за лекцию.
    Только что столкнулся с SSO строками и невозможностью их перемещения без изменения указателя. Если бы не прослушал вашу лекцию пару месяцев так бы и не понял в чём причина.

  • @Laboratoriafozek
    @Laboratoriafozek 3 роки тому

    Не понял как static const string_view решает проблему heap indirection, которая возникает при static const string. string_view же тоже необходимо где-то хранить буфер, а значит она должна вызвать malloc, разве нет?

    • @tilir
      @tilir  3 роки тому

      Нет, он хранит только пару указателей

  • @ivandomnikov9477
    @ivandomnikov9477 4 роки тому

    Что не так было бы с using std::string. Написано на слайде что специально typedef, комментария нет

    • @tilir
      @tilir  4 роки тому

      Я немного не осознал вопрос. Можно номер слайда или таймкод?

    • @ivandomnikov9477
      @ivandomnikov9477 4 роки тому

      @@tilir ua-cam.com/video/bDWdRyt6fIY/v-deo.html
      1:11:55 Тут осознательно использован typedef a не using.

    • @tilir
      @tilir  4 роки тому

      @@ivandomnikov9477 а ну там же написано на слайде -- в методических целях. Использовать typedef слишком часто не следует. Но узнавать его в коде нужно

    • @ivandomnikov6485
      @ivandomnikov6485 4 роки тому

      @@tilir Ах. А я обыскался что в нем магического чего нет в using. Думал может что-то с инстанцированием. Спасибо за ответ

  • @groovy_cyco
    @groovy_cyco 3 роки тому

    А где субтитры? Titled in english, but there is no subtitles.

    • @tilir
      @tilir  3 роки тому

      Я надеюсь кто-нибудь сделает =)

  • @LordAlanttt
    @LordAlanttt 3 роки тому

    Зачем они пять лет учат студентов писать класс string?

    • @tilir
      @tilir  3 роки тому +1

      "Они" это кто? Я в этой лекции явно иронизирую над изобретением велосипедов такого рода. Тем не менее, один раз в жизни во время обучения написать свою строку и наступить на все грабли это очень полезно

    • @LordAlanttt
      @LordAlanttt 3 роки тому

      @@tilir Извините, написал комментарий до того как досмотрел до момета иронизации :) Как я понимаю это магистратура не для программистов?

    • @tilir
      @tilir  3 роки тому

      В группе в основном будущие инженеры Интел. И те, которые будут заниматься программированием и те, которые будут делать железо и те которые будут заниматься перф анализом, тестированием и прочим. Мне кажется, C++ всем полезно

    • @LordAlanttt
      @LordAlanttt 3 роки тому

      @@tilir Так ведь с++ изучают с первого курса, программисты, к 5 курсу (1 курс магистратуры) должны быть уже полными профессионалами и по определению знать класс string. Такое впечатление что в вузах все 5 лет изучают как создать класс стринг и как сортировать массивы :)

    • @kostikvl
      @kostikvl 3 роки тому +2

      ​@@LordAlanttt про сортировку массивов это вы в точку попали. Поищите доклад Андрея Александреску на CppCon'19. Увы мой курс далёк от такого сверхчеловеческого совершенства чтобы включить в него такого рода лекцию про сортировку. А так я бы включил, да

  • @ivank.3960
    @ivank.3960 3 роки тому +1

    спасибо за лекцию

  • @nadoelik
    @nadoelik 2 роки тому

    Спасибо за лекцию