tgindex

Senior C++ Developer

описание

Изучаем C++. По вопросам сотрудничества: @adv_and_pr РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba

11 684
подписчиков

Лучшие посты

за три месяца
  • 23 июл.1 658 просмотров6 пересылок

    Находим обратный массив в C++ Один из самых быстрых вариантов обратного массива в C++ предполагает использование двух указателей для итерации по массиву. Это обеспечивает линейную сложность O(n) и примерное время выполнения алгоритма равное O(n/2). Здесь мы создаем две переменные-указатели, start и end, которые начинаются с первого и последнего элемента соответственно. Затем мы проходим по массиву в цикле while, меняя местами элементы и увеличивая указатель start и уменьшая указатель end на каждой итерации.

  • 17 июл.1 656 просмотров6 пересылок

    Изменяемые лямбда-функции Применения ключевого слова mutable используется для сохранения состояния в лямбда-функциях. Обычно оператор вызова функции замыкания является константным. Другими словами — лямбда не может модифицировать переменные, захваченные по значению. Но ключевое слово mutable может быть применено ко всей лямбда-функции, что сделает все её переменные изменяемыми. Следует заметить, что в отличии от mutable-переменных в объявлении класса, мутабельные лямбда-функции должны использоваться относительно редко и очень аккуратно. Сохранение состояния между вызовами лямбда-функции может быть опасным и контринтуитивным.

  • 25 июл.1 611 просмотров5 пересылок

    Подвох с указателями на Default Subobject Пожалуй, любой С++ разработчик на Unreal Engine имел дело с созданием Default Subobject в конструкторе. Через этот механизм, в частности, создаются компоненты по-умолчанию для акторов. Казалось бы, какие нюансы могут быть связаны с использованием такого стандартного функционала? Смотреть статью

  • 20 июл.1 583 просмотров7 пересылок

    Алгоритм fill_n Алгоритм используется для заполнения некоторых значений по умолчанию в контейнере. Он принимает начало итератора и количество позиций n в качестве аргументов и заполняет первую позицию n , начиная с позиции, указанной параметром begin , заданным значением. Синтаксис: void fill_n (начало итератора, int n, значение типа);

  • 22 июл.1 563 просмотров9 пересылок

    Алгоритм move_backward Перемещает элементы одного итератора в другой. Перемещение начинается с последнего элементом в указанном диапазоне и завершается первым элементом в этом диапазоне.

  • 15 июл.1 490 просмотров5 пересылок

    Структуры данных tuple Так же как и структура данных pair, структура данных tuple (кортеж) представляет собой коллекцию значений разных типов фиксированного размера. Пример на картинке. Иногда вместо структуры данных tuple удобнее использовать std::array. Эта структура данных похожа на простые массивы, используемые в языке C, снабжённые дополнительными возможностями из стандартной библиотеки C++. Эта структура данных появилась в C++ 11.

  • 14 июл.1 452 просмотров6 пересылок

    #вопросы_с_собеседований Что будет выведено на экран? Объяснение: В первом случае на печать выведется 9, потому что функция f принимает параметр t = 5, внутри функции к глобальной переменной a прибавляется 5, теперь a = 9, а f возвращает ссылку на неё и печатается значение a, то есть 9). Далее неважно, что происходит внутри функции, важно, что возвращаемой ссылке на a присваивается 20, значит a = 20. Переменная t не поменяла своё значение, так как в функцию она передается по значению, а не по ссылке. Затем опять вызываем f(5), при этом a = 20, a = 20 + 5, на печати увидим число 25. Теперь присваиваем t значение a (в этот момент a = 25 + 5), значит, t станет равно 30. И, наконец, последняя печать. Вызываем f(30), a = 30 + 30, и возвращается значение 60.

  • 27 июл.1 452 просмотров15 пересылок

    #вопросы_с_собеседований Напишите базовую реализацию std::shared_ptr. std::shared_ptr - умный указатель, который позволяет разделять владение объектом между несколькими shared_ptr. Когда последний shared_ptr уничтожается, он автоматически удаляет объект.

  • 29 июл.1 435 просмотров4 пересылок

    Оператор присваивания ( = ), строго говоря, является бинарным оператором. Его объявление идентично объявлению любого другого бинарного оператора со следующими исключениями: ☑️ Он должен быть нестатической функцией-членом. ☑️ Он не наследуется производными классами. ☑️ Компилятор может создать функцию operator = по умолчанию для типов классов, если она не существует. В примере показано, как объявить оператор присваивания.

  • 30 июл.1 347 просмотров4 пересылок

    Алгоритм lower_bound Возвращает итератор, указывающий на первую позицию в отсортированной последовательности, ограниченной диапазоном [first, last), в которую можно вставить значение value, не нарушая упорядоченности.

  • 14 июл.1 290 просмотров5 пересылок

    ⁉️ malloc — кто же ты на самом деле? Приглашаем на открытый урок. 🗓 23 июля в 20:00 МСК 🆓 Бесплатно. Урок в рамках старта курса «Системное программирование». Программа урока: ✔️ Как работает malloc и какую роль он играет в управлении памятью в системном программировании; ✔️ Что происходит при выделении памяти: от вызова функции до взаимодействия с ОС и аллокатором; ✔️ Какие типичные ошибки возникают при работе с динамической памятью и к каким последствиям они приводят; ✔️ Как понимать поведение программ на уровне памяти и писать более надежный и предсказуемый код. После занятия вы будете знать: - Как устроено динамическое выделение памяти в программах на низком уровне; - Что именно делает malloc и почему его работа не сводится к "просто выделить память"; - Как более осознанно использовать механизмы управления памятью в системной разработке. 🔗 Ссылка на регистрацию: https://vk.cc/cZyXz5 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

  • 2 авг.1 205 просмотров8 пересылок

    Узнаем сколько лет человеку по дате его рождения Для расчета возраста человека по дате его рождения в C++ можно использовать следующий код В этом коде мы запрашиваем у пользователя его дату рождения, а затем получаем текущую дату с помощью функции time. Затем мы используем структуру tm для извлечения года, месяца и дня из текущей даты и вычисляем количество полных лет с помощью формулы now->tm_year + 1900 - year. Если текущий месяц и день меньше, чем месяц и день рождения, мы уменьшаем возраст на 1. Наконец, мы выводим результат на экран.

  • 3 авг.1 202 просмотров5 пересылок

    ➡️ Делегирование конструкторов • В старом C++ вам нужно создавать функцию-член для инициализации и вызывать ее из всех конструкторов для достижения универсально инициализации. • Но начиная с C++11 конструкторы теперь могут вызывать другие конструкторы из того же класса с помощью списка инициализаторов.

  • 1 авг.1 169 просмотров11 пересылок

    «Прозрачный промоушн выгоден и разработчику, и его тимлиду». Нюансы карьеры разработчика на С++ https://habr.com/ru/companies/kaspersky/articles/729620/

  • 4 авг.1 100 просмотров6 пересылок

    ➡️ Диапазоны и итераторы в C++ • В C++ стандартная библиотека шаблонов (STL) предоставляет мощные инструменты для работы с коллекциями данных. • Диапазоны и итераторы позволяют вам легко и эффективно перебирать элементы контейнеров, таких как векторы, списки и множества. • Использование диапазонов и итераторов делает код более чистым и читаемым, упрощает операции перебора и модификации элементов контейнеров.

  • 6 авг.1 085 просмотров8 пересылок

    ➡️ Удаленные и дефолтные функции struct demo { demo() = default; }; demo d; • У вас вполне закономерно может возникнуть вопрос, зачем вам писать 8+ букв (т.е. = default;), когда можно просто использовать {}, т.е. пустой конструктор? Никто вас не останавливает. Но подумай о конструкторе копирования, операторе копирования присваиванием, и т.д. • Пустой конструктор копирования, например, не то же самое, что конструктор копирования по умолчанию (который будет выполнять почленную копию всех членов). • Вы можете ограничить определенную операцию или способ инстанцирования объекта, просто удалив соответствующий метод, как показано ниже: class demo { int m_x; public: demo(int x) : m_x(x){}; demo(const demo &) = delete; demo &operator=(const demo &) = delete; }; demo obj1{123}; demo obj2 = obj1; // ОШИБКА -- вызов удаленного конструктора копирования obj2 = obj1; // ОШИБКА -- оператор = удален 🗣️ В старом С++ вы должны были сделать его приватным. Но теперь в вашем распоряжении есть директива компилятора delete.

  • 10 авг.1 073 просмотров6 пересылок

    ➡️ auto & decltype • 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.

  • 9 авг.1 067 просмотров12 пересылок

    ➡️ Модули (Modules) в C++ Модули - это система сборки и организации кода, представленная в C++20. • Они улучшают компиляцию и организацию кода, предоставляя более четкий и эффективный способ управления зависимостями. • Модули заменяют использование препроцессорных директив #include, улучшая время компиляции и предотвращая проблемы с зависимостями и макросами. • Модули значительно сокращают время компиляции по сравнению с традиционными заголовочными файлами, так как они компилируются только один раз. • Модули предотвращают проблемы, связанные с макросами и конфликтами имен, поскольку они предоставляют четкие границы и изолированные области видимости. • Модули упрощают управление зависимостями и организацию кода, что делает проекты более поддерживаемыми и масштабируемыми.

  • 12 авг.1 016 просмотров8 пересылок

    Snake – искусственный интеллект для игры «Змейка» Цель змеи – постоянно есть пищу и как можно скорее заполнить карту своим телом Первоначально проект был написан на C++. Теперь он был переписан на Python с удобным графическим интерфейсом для пользователя https://github.com/chuyangliu/snake

  • 7 авг.995 просмотров7 пересылок

    ➡️ Концепты (Concepts) в C++ Концепты - это новая возможность в 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 не является арифметическим типом.