Имел удовольствие дописывать два проприетарных игровых движка - везде STL Есть какая-то стигма у людей, застрявших в 98 году, что STL это зло и медленно, но практикой ещё никто не смог подтвердить Понятно, что в узких местах, когда нужен специализированный контейнер/алгоритм, то можно взять boost/abseil/написать своё, но таких мест единицы
>Для своей реализации контейнера легко добавить внутреннюю функцию, использующую внешнюю: auto find_if(xxx) { return std::find_if(begin(), end(), xxx); }
А также rfind_if (+ конст версия) и find_if (конст версия) + итератор-адаптер туда не прокинуть
> Но сколько раз за все время вы писали свой контейнер?
Итераторы - это не только про контейнеры.
Кажется вы просто не оценили гибкость итераторов
> А сколько раз вы набрали begin(), end()
Выше уже написали, что сейчас есть range'и , если надоело печатать
Статья безусловно полезная, спасибо , добавил в закладки
Но вот уже несколько месяцев ломаю голову над практическим применением stackless корутин и генераторов в частности. Может у вас есть несколько примеров?
Статья безусловно интересная, но с примерами какая-то беда (нейронка генерила?)
Пример:
Член size не объявлен
В deallocate внезапно используем sizeof. Наверно всё таки нужна история аллокаций?
Указатели зачем-то void*, а потом касты везде насыпаны
Также не раскрыта тема использования без отстрела ног: когда вызывать деструкторы? Как подружить с контейнерами?
Вопросов больше не имею, но вы многое теряете, как в USB, так и в C++
USB 1.0 - 1996
USB 1.1 - 1998
USB 2.0 - 2000
USB 3.0 - 2008
USB 3.1 - 2013
USB 3.2 - 2017
USB 4 - 2019
USB4 2.0 - 2022
Что-то не вижу тут разницы в 10 лет
А USB какого стандарта вы используете?
А для чего вообще нужно тело в замене std::declval?
Разве так не достаточно?
https://godbolt.org/z/aoEKhfcs7
Имел удовольствие дописывать два проприетарных игровых движка - везде STL
Есть какая-то стигма у людей, застрявших в 98 году, что STL это зло и медленно, но практикой ещё никто не смог подтвердить
Понятно, что в узких местах, когда нужен специализированный контейнер/алгоритм, то можно взять boost/abseil/написать своё, но таких мест единицы
А можете раскрыть почему?
Потому что мне трудно понять, зачем писать на Си-с-классами, вместо использования современного языка и богатых библиотек
>Для своей реализации контейнера легко добавить внутреннюю функцию, использующую внешнюю:
auto find_if(xxx) { return std::find_if(begin(), end(), xxx); }
А также rfind_if (+ конст версия) и find_if (конст версия) + итератор-адаптер туда не прокинуть
> Но сколько раз за все время вы писали свой контейнер?
Итераторы - это не только про контейнеры.
Кажется вы просто не оценили гибкость итераторов
> А сколько раз вы набрали
begin(), end()
Выше уже написали, что сейчас есть range'и , если надоело печатать
Напомнило
Ох уж эти свидетели скорости Си и его близости к ассемблеру.
Можете подтвердить свои слова кодом на Си и кодом на Си++, который делает одно и то же, но Си выигрывает?
Статья безусловно полезная, спасибо , добавил в закладки
Но вот уже несколько месяцев ломаю голову над практическим применением stackless корутин и генераторов в частности. Может у вас есть несколько примеров?