Ключевое слово requires
Ключевое слово requires используется в контексте концепций (concepts) для определения требований, которые тип должен удовлетворять. Концепции представляют собой инструмент в C++, введенный в стандарте C++20, который позволяет более точно указывать ограничения на типы данных, которые могут использоваться в шаблонах.
В примере на картинке Sortable — это концепция, описывающая типы, для которых определены операторы сравнения (»<» и «>»). Функция sortAndPrint принимает два аргумента типа T, удовлетворяющего концепции Sortable, и сравнивает их.
Использование requires в данном контексте позволяет более явно указать ограничения на типы данных, которые могут использоваться в шаблонах и функциях, делая код более читаемым и безопасным.
Ключевое слово requires используется в контексте концепций (concepts) для определения требований, которые тип должен удовлетворять. Концепции представляют собой инструмент в C++, введенный в стандарте C++20, который позволяет более точно указывать ограничения на типы данных, которые могут использоваться в шаблонах.
В примере на картинке Sortable — это концепция, описывающая типы, для которых определены операторы сравнения (»<» и «>»). Функция sortAndPrint принимает два аргумента типа T, удовлетворяющего концепции Sortable, и сравнивает их.
Использование requires в данном контексте позволяет более явно указать ограничения на типы данных, которые могут использоваться в шаблонах и функциях, делая код более читаемым и безопасным.
AI Toolkit — это библиотека C++ только для заголовков, которая предоставляет инструменты для создания ИИ для NPC для игр.
Она предоставляет:
💩 Система конечных автоматов
💩 Дерево поведения
💩 Утилитарный ИИ
💩 Планирование действий с ориентацией на цель
Добавьте папку include этого репозитория в свои пути или добавьте ее как подмодуль:
Она предоставляет:
Добавьте папку include этого репозитория в свои пути или добавьте ее как подмодуль:
$ git submodule add https://github.com/linkdd/aitoolkit.git
$ g++ -std=c++23 -Iaiotoolkit/include main.cpp -o mygame
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - linkdd/aitoolkit: Give a brain to your game's NPCs
Give a brain to your game's NPCs. Contribute to linkdd/aitoolkit development by creating an account on GitHub.
#вопросы_с_собеседования
Предполагая, что buf является валидным указателем, в чем проблема в приведенном на картинке коде? Каким был бы альтернативный способ реализации этого, который позволил бы избежать этой проблемы?
Проблема в коде заключается в том, что --sz >= 0 всегда будет истинным, поэтому вы никогда не выйдете из цикла while (поэтому вы, вероятно, в конечном итоге испортите память или вызовете какое-то нарушение памяти или какой-либо другой программный сбой, в зависимости от того, что вы делаете внутри цикла). Причина, по которой --sz >= 0 всегда будет истинной, заключается в том, что тип sz равен size_t. size_t на самом деле просто псевдоним одного из основных беззнаковых целочисленных типов. Следовательно, поскольку sz не имеет знака, оно никогда не может быть меньше нуля (поэтому условие никогда не может быть ложным). Одним из примеров альтернативной реализации, позволяющей избежать этой проблемы, может быть использование цикла for следующим образом:
for (size_t i = 0; i < sz; i++)
Предполагая, что buf является валидным указателем, в чем проблема в приведенном на картинке коде? Каким был бы альтернативный способ реализации этого, который позволил бы избежать этой проблемы?
Проблема в коде заключается в том, что --sz >= 0 всегда будет истинным, поэтому вы никогда не выйдете из цикла while (поэтому вы, вероятно, в конечном итоге испортите память или вызовете какое-то нарушение памяти или какой-либо другой программный сбой, в зависимости от того, что вы делаете внутри цикла). Причина, по которой --sz >= 0 всегда будет истинной, заключается в том, что тип sz равен size_t. size_t на самом деле просто псевдоним одного из основных беззнаковых целочисленных типов. Следовательно, поскольку sz не имеет знака, оно никогда не может быть меньше нуля (поэтому условие никогда не может быть ложным). Одним из примеров альтернативной реализации, позволяющей избежать этой проблемы, может быть использование цикла for следующим образом:
for (size_t i = 0; i < sz; i++)
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Библиотека шарписта
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Библиотека шарписта
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
🤔 Очередной #дайджест по С++
⭕ Nebula engine — современный опенсорсный игровой движок с бесплатным использованием
⭕ Неклассические контейнеры в C++ — в статье автор рассматривает последовательные контейнеры
⭕ Стремление к лучшему коду на C++ — основы анализа потоков данных
⭕ CMake Tutorial — классный курс по CMake от основ до CTest и CDash
⭕ Дорожная карта навыков разработчика на C++ — с помощью карты автор покажет, какие навыки и знания нужны разработчику на C++
⭕ Nebula engine — современный опенсорсный игровой движок с бесплатным использованием
⭕ Неклассические контейнеры в C++ — в статье автор рассматривает последовательные контейнеры
⭕ Стремление к лучшему коду на C++ — основы анализа потоков данных
⭕ CMake Tutorial — классный курс по CMake от основ до CTest и CDash
⭕ Дорожная карта навыков разработчика на C++ — с помощью карты автор покажет, какие навыки и знания нужны разработчику на C++
🍊Подборка лучших статей «Библиотеки программиста» за декабрь: сохраняй в заметки, чтобы не пропустить #самыйсок
🏦⚠️ Борьба с ошибками разработки ПО в финтехе
🔟🏢 ТОП-10 российских IT-работодателей
📁💡Где программисту взять идеи для портфолио
🧠🧩 Зачем айтишнику психолог?
🏆 Самые популярные языки программирования 2023
👨🎓 14 бесплатных ресурсов, которые пригодятся каждому разработчику
⚙️✅📕 Ответы на вопросы для самопроверки из книги «Тестирование Дот Ком» Романа Савина
❤️🙏 Путь к мечте: как инвалидность не помешала стать разработчиком и продолжить борьбу за здоровье
✍️ Почему отсутствие технической документации убьёт ваш проект?
🏦⚠️ Борьба с ошибками разработки ПО в финтехе
🔟🏢 ТОП-10 российских IT-работодателей
📁💡Где программисту взять идеи для портфолио
🧠🧩 Зачем айтишнику психолог?
🏆 Самые популярные языки программирования 2023
👨🎓 14 бесплатных ресурсов, которые пригодятся каждому разработчику
⚙️✅📕 Ответы на вопросы для самопроверки из книги «Тестирование Дот Ком» Романа Савина
❤️🙏 Путь к мечте: как инвалидность не помешала стать разработчиком и продолжить борьбу за здоровье
✍️ Почему отсутствие технической документации убьёт ваш проект?
Концепт Derived
Концепт Derived в C++ используется для проверки того, является ли указанный тип производным от другого типа. Концепт имеет два шаблонных параметра: Derived и Base.
Концепт Derived удовлетворяется, если и только если Base является классом, который является либо Derived, либо публичным и недвусмысленным базовым классом Derived, игнорируя cv-модификаторы.
Например, код выше удовлетворяет концепту Derived.
Концепт Derived в C++ используется для проверки того, является ли указанный тип производным от другого типа. Концепт имеет два шаблонных параметра: Derived и Base.
Концепт Derived удовлетворяется, если и только если Base является классом, который является либо Derived, либо публичным и недвусмысленным базовым классом Derived, игнорируя cv-модификаторы.
Например, код выше удовлетворяет концепту Derived.
Forwarded from Библиотека тестировщика | QA, тестирование, quality assurance, manual testing, autotesting, ручное тестирование, автотесты
💣 Кем вы видите себя через 5 лет: как отвечать на странные и неудобные вопросы на собеседовании
7 самых распространенных вопросов, которые точно задавали каждому из вас.
Читать статью
7 самых распространенных вопросов, которые точно задавали каждому из вас.
Читать статью
⚙️🛠️ Оптимизируя неоптимизируемое: ускорение компиляции C++
В статье речь пойдёт о повышении скорости компиляции библиотеки {fmt} до уровня библиотеки ввода-вывода Cи stdio.
{fmt} — это популярная открытая библиотека С++, представляющая более эффективную альтернативу С++ библиотеке iostreams и библиотеке Си stdio. Последнюю она обошла по целому ряду аспектов:
🔹 Безопасность типов с проверками форматирующих строк во время компиляции. Эти проверки включены по умолчанию начиная с С++ 20, и присутствуют в качестве дополнения для С++ 14/17. Форматирующие строки среды выполнения в {fmt} также оказываются безопасными, чего невозможно достичь в printf.
🔹 Расширяемость. Определяемый пользователем тип можно сделать форматируемым. При этом большинство типов стандартных библиотек, например, контейнеры и пакеты для обработки даты и времени, предлагают возможность форматирования изначально.
🔹 Производительность. {fmt} намного быстрее любой распространённой реализации printf, порой на несколько порядков (например, в форматировании чисел с плавающей запятой).
🔹 Возможность переноса поддержки Unicode.
Продолжение здесь
#гайд
В статье речь пойдёт о повышении скорости компиляции библиотеки {fmt} до уровня библиотеки ввода-вывода Cи stdio.
{fmt} — это популярная открытая библиотека С++, представляющая более эффективную альтернативу С++ библиотеке iostreams и библиотеке Си stdio. Последнюю она обошла по целому ряду аспектов:
🔹 Безопасность типов с проверками форматирующих строк во время компиляции. Эти проверки включены по умолчанию начиная с С++ 20, и присутствуют в качестве дополнения для С++ 14/17. Форматирующие строки среды выполнения в {fmt} также оказываются безопасными, чего невозможно достичь в printf.
🔹 Расширяемость. Определяемый пользователем тип можно сделать форматируемым. При этом большинство типов стандартных библиотек, например, контейнеры и пакеты для обработки даты и времени, предлагают возможность форматирования изначально.
🔹 Производительность. {fmt} намного быстрее любой распространённой реализации printf, порой на несколько порядков (например, в форматировании чисел с плавающей запятой).
🔹 Возможность переноса поддержки Unicode.
Продолжение здесь
#гайд
input_iterator
В C++ понятие итератора используется для доступа к элементам контейнера. Итераторы могут быть разных типов, каждый из которых имеет свои собственные свойства и ограничения.
Итератор input_iterator представляет собой итератор, который может только читать значения элементов контейнера. Он не может их изменять.
Итераторы input_iterator должны удовлетворять следующим требованиям:
🔹 Они должны поддерживать оператор *, который возвращает значение элемента, на который указывает итератор.
🔹 Они должны поддерживать оператор ++, который перемещает итератор на следующий элемент контейнера.
В C++ понятие итератора используется для доступа к элементам контейнера. Итераторы могут быть разных типов, каждый из которых имеет свои собственные свойства и ограничения.
Итератор input_iterator представляет собой итератор, который может только читать значения элементов контейнера. Он не может их изменять.
Итераторы input_iterator должны удовлетворять следующим требованиям:
🔹 Они должны поддерживать оператор *, который возвращает значение элемента, на который указывает итератор.
🔹 Они должны поддерживать оператор ++, который перемещает итератор на следующий элемент контейнера.
Forwarded from Книги для C/C++ разработчиков
📚Extreme C (2019)
✍️Автор: Amini K.
📃Страниц: 823
После прочтения этой книги начинающие разработчики смогут получить повышение в должности и стать старшими инженерами. Кроме того, после прочтения этой книги их опыт лучше подойдет для более подходящих вакансий, которые являются сложными и, как правило, хорошо оплачиваемыми. Некоторые темы все еще могут быть полезны старшим инженерам по C/C++, но ожидается, что большинство тем им известны, и только некоторые дополнительные детали все еще могут быть полезны.
Ссылка на книгу
✍️Автор: Amini K.
📃Страниц: 823
После прочтения этой книги начинающие разработчики смогут получить повышение в должности и стать старшими инженерами. Кроме того, после прочтения этой книги их опыт лучше подойдет для более подходящих вакансий, которые являются сложными и, как правило, хорошо оплачиваемыми. Некоторые темы все еще могут быть полезны старшим инженерам по C/C++, но ожидается, что большинство тем им известны, и только некоторые дополнительные детали все еще могут быть полезны.
Ссылка на книгу
🤔 Очередной #дайджест по С++
🔽 Дорожная карта навыков разработчика на C++ — универсальная дорожная карта будет полезна всем, кто хочет развиваться в разработке
🔽 Больше функциональности в C++23 — приемы, дополнения и библиотеки улучшающие работу разработчика
🔽 Малоизвестные и интересные особенности C и C++ — малоизвестные и странные решения, принятые в языках C и C++, своего рода солянка из фактов
🔽 Про сортировку чисел и SIMD или как я обогнал STL в 16 раз — как быстро сортировать множества, в которых количество элементов не превышает 128 элементов
🔽 LLVM и GCC, Register allocation, IT-образование в вузах и прочее — познавательный разговор с разработчиком компиляторов для CPU и GPU
🔽 Дорожная карта навыков разработчика на C++ — универсальная дорожная карта будет полезна всем, кто хочет развиваться в разработке
🔽 Больше функциональности в C++23 — приемы, дополнения и библиотеки улучшающие работу разработчика
🔽 Малоизвестные и интересные особенности C и C++ — малоизвестные и странные решения, принятые в языках C и C++, своего рода солянка из фактов
🔽 Про сортировку чисел и SIMD или как я обогнал STL в 16 раз — как быстро сортировать множества, в которых количество элементов не превышает 128 элементов
🔽 LLVM и GCC, Register allocation, IT-образование в вузах и прочее — познавательный разговор с разработчиком компиляторов для CPU и GPU
❗«Библиотека программиста» ищет контент-менеджера для ведения телеграм-каналов
Ищем человека, который грамотно пишет и разбирается в одной из этих тем:
👉С++
👉C#
👉DevOps
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Подробнее о вакансии и форма для отклика — по ссылке.
Ждем вас в команде!
Ищем человека, который грамотно пишет и разбирается в одной из этих тем:
👉С++
👉C#
👉DevOps
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Подробнее о вакансии и форма для отклика — по ссылке.
Ждем вас в команде!
#вопросы_с_собеседования
Объясните концепцию и применение шаблонов политик в C++ и как они способствуют принципам проектирования, основанным на композиции вместо наследования
Шаблоны политик в C++ представляют собой технику проектирования, при которой поведение класса параметризуется через шаблоны. Это позволяет программистам выбирать или изменять аспекты поведения класса на этапе компиляции, вставляя разные «политики» — это могут быть классы или функции, определяющие определённые аспекты поведения. Этот подход способствует гибкости и повторному использованию кода, позволяя композицию поведения вместо жёсткого наследования. Он также помогает уменьшить связность кода и увеличивает его модульность, поскольку изменения в одной политике не влияют на другие.
Объясните концепцию и применение шаблонов политик в C++ и как они способствуют принципам проектирования, основанным на композиции вместо наследования
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Forwarded from Библиотека задач по C++ | тесты, код, задания
Алгоритм includes
Используется для распознавания, существуют ли все числа тз одного контейнера в других контейнерах. Это помогает проверить, является ли набор подмножеством другого набора или нет, учитывая, что набор упорядочен. Ожидается, что элементы будут отсортированы по порядку.
Используется для распознавания, существуют ли все числа тз одного контейнера в других контейнерах. Это помогает проверить, является ли набор подмножеством другого набора или нет, учитывая, что набор упорядочен. Ожидается, что элементы будут отсортированы по порядку.