@@ivandomnikov6485 ну вы скажете "опозориться". Не принимайте близко к сердцу. Люди часто так ошибаются. Особенно забавно когда студент на зачете. Классика: ответ на вопрос как зовут преподавателя провален...
Вопрос касательно циклических перестановок 4:11. А как мы применяя циклическую перестановку (4 2 1 3) к [1 2 3 4] получаем [3 1 4 2]? Разве там не должно получиться [3 2 4 1]?
На 44:54 вы говорите, что тут фигурные скобки для создания интегральной константы. То есть нам нужно именно создать объект интегральной константы, но как мы тогда наследуемся? Это разве не пустое тело класса, или я что-то не понимаю?
Вот утверждается, что лучше не передавать контейнер по ссылке из-за второго уровня косвенности, но в 20 стандарте внезапно появляется std::erase и std::erase_if, которые по ссылке принимают вектор и мапу. Что изменилось в 20 стандарте?
Ничего не изменилось. Это же не обобщённый алгоритм над парой итераторов. Erase как требовал конкретного контейнера по ссылке, так и требует, тут со ссылкой всё хорошо.
Не нужно везде лепить for each. Там правильный for loop: он один и точно выражает что делает алгоритм. Также как цикл внутри любого другого алгоритма (copy, transform и того же for-each).
Спасибо, Владимир, за то, что продолжаете вашу работу
Да уже немного осталось и выложу курс. Только я Константин =)
Надо же так опозориться. Прошу прощения. Ютуб не даёт исправить
@@ivandomnikov6485 ну вы скажете "опозориться". Не принимайте близко к сердцу. Люди часто так ошибаются. Особенно забавно когда студент на зачете. Классика: ответ на вопрос как зовут преподавателя провален...
Вопрос касательно циклических перестановок 4:11. А как мы применяя циклическую перестановку (4 2 1 3) к [1 2 3 4] получаем [3 1 4 2]? Разве там не должно получиться [3 2 4 1]?
Разобрался и если я все правильно понял, то умозаключения такие:
(4 2 1 3) => Это перемещение позиций [1 2 3 4] по следующему алгоритму 3 -> 1 -> 2 -> 4. Т е: [3 ] -> [3 1 ] -> [3 1. 2] -> [3 1 4 2]
На 44:54 вы говорите, что тут фигурные скобки для создания интегральной константы. То есть нам нужно именно создать объект интегральной константы, но как мы тогда наследуемся? Это разве не пустое тело класса, или я что-то не понимаю?
Выделенные синим скобки для создания объекта. Чёрные это пустое тело класса.
Вот утверждается, что лучше не передавать контейнер по ссылке из-за второго уровня косвенности, но в 20 стандарте внезапно появляется std::erase и std::erase_if, которые по ссылке принимают вектор и мапу. Что изменилось в 20 стандарте?
Ничего не изменилось. Это же не обобщённый алгоритм над парой итераторов. Erase как требовал конкретного контейнера по ссылке, так и требует, тут со ссылкой всё хорошо.
Вы путаете наверно erase и remove. Erase невозможно сделать без самого контейнера.
22:00 --- simplify_loops() --- по хорошему, там явный for loop это противоречие всей лекции про алгоритмы. std::for_each же есть
Не нужно везде лепить for each. Там правильный for loop: он один и точно выражает что делает алгоритм. Также как цикл внутри любого другого алгоритма (copy, transform и того же for-each).
@@tilir for each компактней в данном случае
@@tilir если брать данный конкретный случай, я, увидев for loop, стал искать нетривиальное условие выхода или нетривиальное же изменение итератора
Что то странное на 18:12 что такое X::value_type ? это не у итератора берётся, а у его типа, ну например инта...
p0634, включен в 20 стандарт (если речь про отсутствие typename)
В коде там вот так: using T = typename std::decay::type::value_type.
Этот момент, конечно, надо упрощать.