Базовый курс C++ (MIPT, ILab). Lecture 26. Метапрограммирование.

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

КОМЕНТАРІ • 18

  • @ivandomnikov6485
    @ivandomnikov6485 2 роки тому +7

    Спасибо, Владимир, за то, что продолжаете вашу работу

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

      Да уже немного осталось и выложу курс. Только я Константин =)

    • @ivandomnikov6485
      @ivandomnikov6485 2 роки тому +1

      Надо же так опозориться. Прошу прощения. Ютуб не даёт исправить

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

      @@ivandomnikov6485 ну вы скажете "опозориться". Не принимайте близко к сердцу. Люди часто так ошибаются. Особенно забавно когда студент на зачете. Классика: ответ на вопрос как зовут преподавателя провален...

  • @MikhailZavelskii
    @MikhailZavelskii 5 місяців тому

    Вопрос касательно циклических перестановок 4:11. А как мы применяя циклическую перестановку (4 2 1 3) к [1 2 3 4] получаем [3 1 4 2]? Разве там не должно получиться [3 2 4 1]?

    • @MikhailZavelskii
      @MikhailZavelskii 5 місяців тому

      Разобрался и если я все правильно понял, то умозаключения такие:
      (4 2 1 3) => Это перемещение позиций [1 2 3 4] по следующему алгоритму 3 -> 1 -> 2 -> 4. Т е: [3 ] -> [3 1 ] -> [3 1. 2] -> [3 1 4 2]

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

    Что то странное на 18:12 что такое X::value_type ? это не у итератора берётся, а у его типа, ну например инта...

    • @АндрейШерстобитов-в8д
      @АндрейШерстобитов-в8д 2 роки тому

      p0634, включен в 20 стандарт (если речь про отсутствие typename)

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

      В коде там вот так: using T = typename std::decay::type::value_type.
      Этот момент, конечно, надо упрощать.

  • @АндрейШерстобитов-в8д

    Вот утверждается, что лучше не передавать контейнер по ссылке из-за второго уровня косвенности, но в 20 стандарте внезапно появляется std::erase и std::erase_if, которые по ссылке принимают вектор и мапу. Что изменилось в 20 стандарте?

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

      Ничего не изменилось. Это же не обобщённый алгоритм над парой итераторов. Erase как требовал конкретного контейнера по ссылке, так и требует, тут со ссылкой всё хорошо.

    • @jalomic
      @jalomic 11 місяців тому +1

      Вы путаете наверно erase и remove. Erase невозможно сделать без самого контейнера.

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

    22:00 --- simplify_loops() --- по хорошему, там явный for loop это противоречие всей лекции про алгоритмы. std::for_each же есть

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

      Не нужно везде лепить for each. Там правильный for loop: он один и точно выражает что делает алгоритм. Также как цикл внутри любого другого алгоритма (copy, transform и того же for-each).

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

      @@tilir for each компактней в данном случае

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

      @@tilir если брать данный конкретный случай, я, увидев for loop, стал искать нетривиальное условие выхода или нетривиальное же изменение итератора

  • @ДмитрийЩека-с7л
    @ДмитрийЩека-с7л 2 місяці тому

    На 44:54 вы говорите, что тут фигурные скобки для создания интегральной константы. То есть нам нужно именно создать объект интегральной константы, но как мы тогда наследуемся? Это разве не пустое тело класса, или я что-то не понимаю?

    • @tilir
      @tilir  2 місяці тому

      Выделенные синим скобки для создания объекта. Чёрные это пустое тело класса.