TGViewer
Channel Public Channel
Senior C++ Developer

Senior C++ Developer

@seniorcpp

Изучаем C++.

По вопросам сотрудничества: @adv_and_pr

РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba
Subscribers
11.6K
Photos
1.5K
Videos
3
Links
640

Showing posts older than #3247 · Back to latest

Older Posts 20 shown
Post #3246 1.78K
Алгоритм rotate

Меняет местами элементы в диапазоне [first, last) таким образом, что элемент n_first становится первым в новом диапазоне, а n_first-1 — последним.

Параметры:
first, last - диапазон элементов для изменения их порядка.
n_first - элемент, который должен стать первым в новом диапазоне.
Post #3245 1.54K
#вопросы_с_собеседований
Виртуальный конструктор: что он собой представляет?

Ответ:
Это каверзный вопрос с IT-собеседований, который чаще всего задают после виртуальных деструкторов, чтобы запутать. Конструктор не может быть виртуальным, поскольку в этом нет никакого смысла: при создании объектов нет такой неоднозначности, как при их удалении.😁
Post #3244 1.81K
Быстрая сортировка

Отсортируйте заданный массив с помощью быстрой сортировки.

Формат входных данных:
Первая строка входных данных содержит одно натуральное число nn (1 ≤ n ≤ 10^5) – количество элементов в массиве. В следующей строке находятся элементы массива – n целых чисел, не превосходящих по абсолютной величине 10^9.

Формат выходных данных:
Выведите элементы массива в порядке неубывания.
Post #3242 1.8K
#вопросы_с_собоседований
В чем различия между delete и delete[]?

delete предназначен для уничтожения объектов, память под которые выделена при помощи new(). delete[] для объектов выделенных при помощи оператора new[]().

При неправильном использовании оператора delete (например, delete вместо delete[]) результат будет: undefined behavior.
Post #3241 1.73K
Snake – искусственный интеллект для игры «Змейка»

Цель змеи – постоянно есть пищу и как можно скорее заполнить карту своим телом

Первоначально проект был написан на C++. Теперь он был переписан на Python с удобным графическим интерфейсом для пользователя

https://github.com/chuyangliu/snake
Post #3240 1.79K
➡️ 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.
Post #3239 1.56K
➡️ Модули (Modules) в C++

Модули - это система сборки и организации кода, представленная в C++20.

• Они улучшают компиляцию и организацию кода, предоставляя более четкий и эффективный способ управления зависимостями.

•
Модули заменяют использование препроцессорных директив #include, улучшая время компиляции и предотвращая проблемы с зависимостями и макросами.

•
Модули значительно сокращают время компиляции по сравнению с традиционными заголовочными файлами, так как они компилируются только один раз.

•
Модули предотвращают проблемы, связанные с макросами и конфликтами имен, поскольку они предоставляют четкие границы и изолированные области видимости.

•
Модули упрощают управление зависимостями и организацию кода, что делает проекты более поддерживаемыми и масштабируемыми.
Post #3238 1.4K
➡️ Концепты (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 не является арифметическим типом.
Post #3237 1.48K
➡️ Удаленные и дефолтные функции

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.
Post #3236 1.42K
➡️ Диапазоны и итераторы в C++

• В C++ стандартная библиотека шаблонов (STL) предоставляет мощные инструменты для работы с коллекциями данных.

• Диапазоны и итераторы позволяют вам легко и эффективно перебирать элементы контейнеров, таких как векторы, списки и множества.

• Использование диапазонов и итераторов делает код более чистым и читаемым, упрощает операции перебора и модификации элементов контейнеров.
Post #3235 1.57K
➡️ Делегирование конструкторов

• В старом C++ вам нужно создавать функцию-член для инициализации и вызывать ее из всех конструкторов для достижения универсально инициализации.

• Но начиная с C++11 конструкторы теперь могут вызывать другие конструкторы из того же класса с помощью списка инициализаторов.
Post #3234 1.55K
Узнаем сколько лет человеку по дате его рождения

Для расчета возраста человека по дате его рождения в C++ можно использовать следующий код

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

Возвращает итератор, указывающий на первую позицию в отсортированной последовательности, ограниченной диапазоном [first, last), в которую можно вставить значение value, не нарушая упорядоченности.
Post #3231 1.73K
Оператор присваивания ( = ), строго говоря, является бинарным оператором. Его объявление идентично объявлению любого другого бинарного оператора со следующими исключениями:

☑️ Он должен быть нестатической функцией-членом.

☑️ Он не наследуется производными классами.

☑️ Компилятор может создать функцию operator = по умолчанию для типов классов, если она не существует.

В примере показано, как объявить оператор присваивания.
Post #3230 1.67K
#вопросы_с_собеседований
Напишите базовую реализацию std::shared_ptr.

std::shared_ptr - умный указатель, который позволяет разделять владение объектом между несколькими shared_ptr. Когда последний shared_ptr уничтожается, он автоматически удаляет объект.
Post #3229 1.8K
Подвох с указателями на Default Subobject

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

Смотреть статью
Post #3228 1.8K
Находим обратный массив в C++

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

Здесь мы создаем две переменные-указатели, start и end, которые начинаются с первого и последнего элемента соответственно. Затем мы проходим по массиву в цикле while, меняя местами элементы и увеличивая указатель start и уменьшая указатель end на каждой итерации.
Post #3227 1.67K
Алгоритм move_backward

Перемещает элементы одного итератора в другой.

Перемещение начинается с последнего элементом в указанном диапазоне и завершается первым элементом в этом диапазоне.
Post #3226 1.7K
Алгоритм fill_n

Алгоритм используется для заполнения некоторых значений по умолчанию в контейнере.

Он принимает начало итератора и количество позиций n в качестве аргументов и заполняет первую позицию n , начиная с позиции, указанной параметром begin , заданным значением.

Синтаксис:
void fill_n (начало итератора, int n, значение типа);
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →