Уютное сообщество С++ разработчиков
783 subscribers
80 photos
7 videos
82 links
Изучаем C++.
Ресурсы, обучения, задачи, шпаргалки.
Вопросы с собеседований по C++ и ответы на них.
Задачи и тесты по C++ для тренировки и обучения.
По рекламе: @anothertechrock
Download Telegram
🚀 Давно не прокачивал свои навыки в С++?

Записывайся на онлайн-урок «Условные переменные в С++» 11 июня в 20:00 мск!

Узнай все о std::condition_variable, избегай типовых ошибок, познакомься с spurious wakeup и напиши concurrency-примитивы!

➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок.
Каким будет результат вычисления цикла?
int m = 2, n = 5; while (m <= 3) { while (m <= n) { n = m; break; } break; m++; }
Anonymous Quiz
3%
m = 2; n = 10;
17%
m = 5; n = 2;
75%
m = 2; n = 2;
6%
m = 120; n = 30;
0%
m = 0; n = 2;
Хакинг на С++

Автор: А. А. Ярошенко
Дата выхода: 2022

#cpp #ru #2O22

Скачать книгу
🔥1
C++20 для программистов

Автор: Пол Дейтел
Дата выхода: 2024

#cpp #ru #2O24

Скачать книгу
Красивый C++: 30 главных правил чистого,
безопасного и быстрого кода

Авторы:
Дж. Гай Дэвидсон, Кейт Грегори
Год издания: 2023

#cpp #ru

Скачать книгу
👍1
С++ 20 в деталях

Автор:
Гримм Райнер
Год издания: 2023

#cpp #ru

Скачать книгу
👍1
Можно ли перегружать операции для встроенных типов данных?
Anonymous Quiz
63%
Да
37%
Нет
Задача: Напишите программу на C++, которая запрашивает у пользователя целое неотрицательное число N и затем выводит на экран факториал этого числа.

Решение вечером. Пишите ваши варианты в комментариях.
Вариант решения от ChatGPT:

#include <iostream>

int main() {
int N;
unsigned long long factorial = 1; // Используем unsigned long long для больших факториалов

std::cout << "Введите неотрицательное целое число N: ";
std::cin >> N;

if (N < 0) {
std::cout << "Факториал не определен для отрицательных чисел." << std::endl;
} else {
for (int i = 2; i <= N; ++i) {
factorial *= i;
}
std::cout << N << "! = " << factorial << std::endl;
}

return 0;
}

Что скажете?
💡Задача: Игра в прыжки

Условие: Дан целочисленный массив nums. Изначально вы находитесь в первом индексе массива, и каждый элемент массива представляет максимальную длину прыжка в этой позиции.

Верните true, если вы можете добраться до последнего индекса, или false в противном случае.

Пример:
Ввод: nums = [1,3,1,1,4]
Вывод: true
Объяснение: Переходим на 1 шаг от индекса 0 к 1, затем на 3 шага к последнему индексу.

Ввод: nums = [3,2,1,0,4]
Вывод: false

Решение:

class Solution {
public:
bool canJump(vector<int>& nums) {
int n = nums.size();
int maxReach = 0;
for (int i = 0; i < n; i++) {
if (i > maxReach) return false;
maxReach = max(maxReach, i + nums[i]);
}
return true;
}
};

Временное решение: O(N)

Пространственное решение: O(1)
Алгоритм lexicographic_compare

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

Алгоритм принимает 2 диапазона элементов для сравнения, сравнивает элементы попарно, используя оператор < и возвращает true, если первый диапазон меньше второго, или false в противном случае.

Работает для любых типов данных, которые можно сравнивать с помощью <.

#код
Дано целое число, преобразовать его в римскую цифру

В нашем решении метод intToRoman принимает целое число в качестве аргумента и возвращает его римское представление в виде строки.

Внутри метода intToRoman создаются четыре массива строк, которые содержат римские числа для единиц, десятков, сотен и тысяч. Затем создается строка Roman, которая формируется путем конкатенации соответствующих элементов из каждого массива, используя арифметические операции для определения индексов.

#код
Алгоритмический тренинг.
Решения практических задач
на Python и С++


Автор: Максим Иванов
Дата выхода: 2023

#cpp #python #ru #2O23

Скачать книгу
Методы программирования
в задачах и примерах
на C/C++


Автор: А. А. Корнев
Дата выхода: 2023

#c #cpp #ru #2O23

Скачать книгу
👍1
Starting Out with C++ from Control
Structures to Objects

Автор:
Tony Gaddis
Год издания: 2022

#cpp #en #2O22

Скачать книгу
👍21👌1
Правда С++ замечательный язык?)
😁11👌21👎1
А вы тоже делаете важный вид, что вы такой просветленный и знаете asm, а на деле просто надеетесь на то, что понимание работы этих закорючек само собой появится у вас в голове?
This media is not supported in your browser
VIEW IN TELEGRAM
sololearn — сайт, на котором вы найдете интерактивный курс по C++ как для начинающих, так и для опытных разработчиков. Также на сайте есть встроенная нейросеть, которая разберёт ваши неправильные ответы.

📌 Ссылочка: sololearn.com

📣 Уютное сообщество С++ разработчиков | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👌2
Beginning C++ Compilers

Авторы: Ademi B. Ospanova,
Berik I. Tuleuov
Дата выхода: 2024

#cpp #en #2O24

Скачать книгу
👌2👍1
Современный C++ безопасное использование

Авторы: Джон Лакос, Витторио Ромео,
Ростислав Хлебников
Дата выхода: 2023

#cpp #ru #2O23

Скачать книгу
👍2
Неименованные параметры функций

С++ позволяет не указывать имена параметров функций, если они не используются в коде.


void foo(int /no name here/);

void foo(int /no name here/)
{
std::cout << "foo" << std::endl;
}

foo(5);


Это можно делать и в объявлении функции, и в ее определении.

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

Но вот вопрос возникает тогда. Если параметр ничего не делает, нахрена он тогда вообще нужен?

На самом деле много кейсов, где неименованный параметр может пригодится.

💥 Допустим, у вас есть функция, которая используется в очень многих местах кода, может даже через какие-нибудь указатели на функцию. И в один момент времени часть функционала стала ненужной и один или несколько параметров стали ненужны. Править все вызовы этой функции было бы болью, особенно если туда вовлечены function поинтеры. Вместо этого вы можете сделать эти параметры безымянными, чтобы явно в коде показать, что этот параметр не используется. Его и нельзя даже будет использовать.

💥 Заглушки. Зачастую для тестирования функциональности применяют сущности-болванки, которые внешне ведут себя, как нормальные ребята, но на самом деле они лодыри и ничего путного не делают. Это нужно для мокания соседних модулей, чтобы протестировать только функциональность выбранного набора модулей. Такие заглушки должны выглядеть подобающе, то есть полностью повторять апи замоканой сущности, но могут не делать никакой полезной работы. Поэтому можно в этом апи сделать безымянные параметры, чтобы еще раз подчеркнуть, что они не используются.

💥 Иногда существующие сущности в коде требуют коллбэки определенного вида. И вам в своем коллбэке возможно не нужно использовать весь набор параметров. Но для соблюдения апи вы должны их указать в сигнатуре своего обратного вызова. В этом случае можно сделать эти параметры безымянными.

💥 Иногда в иерархии полиморфных классов в конкретном наследнике вам не нужны все параметры виртуальной функции. Но для поддержания корректности переопределения виртуального интерфейса вы должны включить все параметры в сигнатуру метода. Опять же, неиспользуемые параметры можно пометить безымянными.

💥 Знаменитая перегрузка постфиксного оператора инкремента/декремента. Есть 2 вида этих операторов: префикстный и постфиксный. Проблема в том, что это все еще вызов функции operator++. Как различить реализации этих функций? Правильно, нужна перегрузка. Вот здесь и приходит на помощь безымянный параметр: в коде он не нужен, но влияет на выбор конкретной перегрузки. Выглядит это так:

struct Digit
{
Digit(int digit=0) : m_digit{digit} {}
Digit& operator++(); // prefix has no parameter
Digit operator++(int); // postfix has an int parameter
private:
int m_digit{};
};


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

Stay useful. Stay cool.

📣 Уютное сообщество С++ разработчиков #cppcore #design
Please open Telegram to view this post
VIEW IN TELEGRAM