PEGTL (Parsing Expression Grammar Template Library) — это библиотека для создания синтаксических анализаторов (парсеров) на C++. Она предоставляет мощные инструменты для определения грамматик и разбора текстов, что делает ее отличным выбором для создания языков программирования и обработки текстов.
•
PEGTL позволяет создавать сложные парсеры с минимальными усилиями, обеспечивая при этом высокую производительность и гибкость.Please open Telegram to view this post
VIEW IN TELEGRAM
Алгоритм prev_permutation
Алгоритм переставляет элементы так, чтобы получилась предыдущая в лексикографическом порядке перестановка. Можно применять не только к векторам, но и к строкам (как и многие другие алгоритмы).
Метод возвращает true, если удалось построить предыдущую в лексикографическом порядке перестановку. Если же первоначальная перестановка уже была минимальной в лексикографическом порядке, то метод генерирует максимальную в лексикографическом порядке перестановку и возвращает false.
Алгоритм переставляет элементы так, чтобы получилась предыдущая в лексикографическом порядке перестановка. Можно применять не только к векторам, но и к строкам (как и многие другие алгоритмы).
Метод возвращает true, если удалось построить предыдущую в лексикографическом порядке перестановку. Если же первоначальная перестановка уже была минимальной в лексикографическом порядке, то метод генерирует максимальную в лексикографическом порядке перестановку и возвращает false.
#вопросы_с_собеседований
В чем проблема следующего фрагмента?
Из спецификации (C++11 §5.3.5/3):
Если статический тип подлежащего удалению объекта отличается от его динамического типа, статический тип должен быть базовым классом динамического типа подлежащего удалению объекта и иметь виртуальный деструктор или поведение undefined.
В чем проблема следующего фрагмента?
Из спецификации (C++11 §5.3.5/3):
Если статический тип подлежащего удалению объекта отличается от его динамического типа, статический тип должен быть базовым классом динамического типа подлежащего удалению объекта и иметь виртуальный деструктор или поведение undefined.
#вопросы_с_собоседований
В чем различия между delete и delete[]?
delete предназначен для уничтожения объектов, память под которые выделена при помощи new(). delete[] для объектов выделенных при помощи оператора new[]().
При неправильном использовании оператора delete (например, delete вместо delete[]) результат будет: undefined behavior.
В чем различия между delete и delete[]?
delete предназначен для уничтожения объектов, память под которые выделена при помощи new(). delete[] для объектов выделенных при помощи оператора new[]().
При неправильном использовании оператора delete (например, delete вместо delete[]) результат будет: undefined behavior.
Snake – искусственный интеллект для игры «Змейка»
Цель змеи – постоянно есть пищу и как можно скорее заполнить карту своим телом
Первоначально проект был написан на C++. Теперь он был переписан на Python с удобным графическим интерфейсом для пользователя
https://github.com/chuyangliu/snake
Цель змеи – постоянно есть пищу и как можно скорее заполнить карту своим телом
Первоначально проект был написан на C++. Теперь он был переписан на Python с удобным графическим интерфейсом для пользователя
https://github.com/chuyangliu/snake
GitHub
GitHub - chuyangliu/snake: Artificial intelligence for the Snake game.
Artificial intelligence for the Snake game. Contribute to chuyangliu/snake development by creating an account on GitHub.
•
auto-типизированные переменные выводятся компилятором на основе типа их инициализатора.•
Чрезвычайно полезно с точки зрения удобочитаемости, особенно для сложных типов:// std::vector<int>::const_iterator cit = v.cbegin();
auto cit = v.cbegin(); // альтернатива
// std::shared_ptr<vector<uint32_t>> demo_ptr(new vector<uint32_t>(0);
auto demo_ptr = make_shared<vector<uint32_t>>(0); // альтернатива
•
Функции также могут выводить тип возвращаемого значения с помощью auto
. В C++11 тип возвращаемого значения должен быть указан либо явно, либо с помощью decltype
, например:template <typename X, typename Y>
auto add(X x, Y y) -> decltype(x + y)
{
return x + y;
}
add(1, 2); // == 3
add(1, 2.0); // == 3.0
add(1.5, 1.5); // == 3.0
•
Приведенная выше форма определения возвращаемого типа называется trailing return type, т.е. -> return-type
.Please open Telegram to view this post
VIEW IN TELEGRAM
Модули - это система сборки и организации кода, представленная в C++20.
•
Они улучшают компиляцию и организацию кода, предоставляя более четкий и эффективный способ управления зависимостями.
•
Модули заменяют использование препроцессорных директив #include, улучшая время компиляции и предотвращая проблемы с зависимостями и макросами.
•
Модули значительно сокращают время компиляции по сравнению с традиционными заголовочными файлами, так как они компилируются только один раз.
•
Модули предотвращают проблемы, связанные с макросами и конфликтами имен, поскольку они предоставляют четкие границы и изолированные области видимости.
•
Модули упрощают управление зависимостями и организацию кода, что делает проекты более поддерживаемыми и масштабируемыми.Please open Telegram to view this post
VIEW IN TELEGRAM
Концепты - это новая возможность в C++20, которая позволяет задавать ограничения на шаблонные параметры. Это позволяет писать более безопасный и читаемый код, поскольку компилятор проверяет соответствие типов требованиям концептов на этапе компиляции.
• template<typename T> concept Arithmetic = std::is_arithmetic_v<T>;
определяет концепт Arithmetic, который ограничивает типы, для которых значение std::is_arithmetic_v<T>
истинно (т.е. типы, которые являются арифметическими).• template<Arithmetic T> T add(const T& a, const T& b)
определяет шаблонную функцию add, которая будет компилироваться только для типов, удовлетворяющих концепту Arithmetic.Использование функции add:
•
Примеры с целыми числами и числами с плавающей запятой успешно вызывают функцию add
.
•
Пример со строками (закомментированный) вызовет ошибку компиляции, так как std::string
не является арифметическим типом.Please open Telegram to view this post
VIEW IN TELEGRAM