cookie

Sizning foydalanuvchi tajribangizni yaxshilash uchun cookie-lardan foydalanamiz. Barchasini qabul qiling», bosing, cookie-lardan foydalanilishiga rozilik bildirishingiz talab qilinadi.

avatar

Библиотека собеса по C++ | вопросы с собеседований

Вопросы с собеседований по C++ и ответы на них. Список наших каналов: https://t.me/proglibrary/8353 Учиться у нас: https://proglib.io/w/907158ab Обратная связь: @proglibrary_feedback_bot По рекламе: @proglib_adv Прайс: @proglib_advertising

Ko'proq ko'rsatish
Reklama postlari
7 266
Obunachilar
+824 soatlar
+407 kunlar
-2930 kunlar
Post vaqtlarining boʻlagichi

Ma'lumot yuklanmoqda...

Find out who reads your channel

This graph will show you who besides your subscribers reads your channel and learn about other sources of traffic.
Views Sources
Nashrni tahlil qilish
PostlarKo'rishlar
Ulashishlar
Ko'rish dinamikasi
01
🍔 Дорожная карта для изучения C с нуля • Автор делится списком полезных ресурсов для изучения Си с нуля • В статье представлены различные области, в которых автор нуждался в дополнительном разъяснении • Автор предлагает начать свой собственный проект, выбрав тему, которая действительно интересует • Для изучения внутренней части ОС x86-64 рекомендуется разработка драйвера ядра и руткита 👉 Ссылочка
31111Loading...
02
✉️❌ Как завалить собеседование, даже не начав его: 8 ошибок в сопроводительных письмах Откликаетесь, но сразу получаете отказы? Не торопитесь с выводами — возможно, все дело в вашем сопроводительном письме. 👉Сопроводительное — это первое впечатление, которое мы производим на эйчара, а первое впечатление, как известно, очень важно. Собрали для вас несколько распространенных ошибок по составлению такого письма — а в статье по ссылке можно найти остальные ошибки и пример идеального сопроводительного. Кстати, вакансии можно поискать в наших профильных каналах: 🤮Data Science, анализ данных, аналитика 🤮Python 🤮Frontend
4924Loading...
03
🤯 Как простая задачка поставила в тупик программистов (и как они из него выбрались) В 2010 году пользователь Stack Overflow не справился с задачей на собеседовании. Обсуждение способов решения этого задания стало одной из самых популярных тем на платформе. Об этой истории, а также о способах решения задачи, читайте в нашей статье 👉 Ссылка 👉 Зеркало
4764Loading...
04
🍔 Отладочные макросы Отладочные макросы в C++ используются для упрощения процесса отладки и диагностики программного кода Основные отладочные макросы включают assert, static_assert и пользовательские макросы 🍓 assert Макрос assert определён в заголовочном файле <cassert> и используется для проверки логических выражений во время выполнения программы. Если выражение вернёт false, assert завершает выполнение программы и выводит сообщение об ошибке #include <cassert> void test(int x) { assert(x > 0 && "x must be positive"); // остальной код функции } int main() { test(5); // проходит проверку test(-3); // приводит к ошибке во время выполнения return 0; } 🍒 static_assert static_assert введён в C++11 и позволяет проверять условия на этапе компиляции. Это особенно полезно для проверки условий, которые должны выполняться всегда, независимо от состояния программы во время выполнения #include <type_traits> template <typename T> void check() { static_assert(std::is_integral<T>::value, "T must be an integral type"); } int main() { check<int>(); // проходит проверку check<float>(); // ошибка компиляции: T must be an integral type return 0; } 🫐 Пользовательские отладочные макросы Вы также можете определять собственные макросы для отладки, которые помогут вам выводить дополнительную информацию или выполнять специфические проверки #include <iostream> #define DEBUG #ifdef DEBUG #define DEBUG_PRINT(x) std::cout << x << std::endl #else #define DEBUG_PRINT(x) #endif int main() { int value = 42; DEBUG_PRINT("Value: " << value); return 0; }
3 34939Loading...
05
⚡️Proglib запускает канал про ИИ для генерации звука Там мы будем рассказывать про все существующие нейросети, которые генерируют музыку и голос — с пошаговыми инструкциями, инструментами и лайфхаками. ⭐️генерация голоса и музыки ⭐️замена и перевод речи ⭐️распознавание звуков 👉Подписывайтесь!
9090Loading...
06
Media files
1 1902Loading...
07
🍔 Какая избавиться от вложенных min/max? Старый вариант использования auto maxVal = std::max(x1, min(x2, min(x3, x4))); Сейчас же можно использовать cписки инициализации, чтобы уменьшить вложенность auto maxVal = std::max(({x1, x2, x3, x4});
4 50717Loading...
08
😱 В чем разница между вектором и списком? std::vector — это реальный массив, а базовая реализация std::list — это двусторонне связанный список ❗ std::vector поддерживает произвольный доступ с доступом за O(1), но производительность вставки и удаления в общем случае низкая. Но стоить отметить что вставка в конец если capacity больше size происходить за O(1) ❗Так же вставка и удаление из std::vector в узлах, отличных от хвоста, вызовет копирование памяти, в std::list такого не происходит ❗std::list не поддерживает произвольный доступ, но производительность вставки и удаления O(1) ❗std::vector хранится последовательно, список — нет ❗std::vector выделяет память сразу и увеличивает емкость в два раза, когда ее недостаточно. std::list будет обращаться за новой памятью каждый раз, когда вставляется новый узел
1 3925Loading...
09
😱 Как объединить строки в C? В Си строки - это просто массивы char'ов. Следовательно, мы не можем напрямую объединить их с другими строками Мы можем использовать strcat функцию, которая добавляет строку, на которую указывает src, в конец строки, на которую указывает dest: char *strcat(char *dest, const char *src); ❗️dest выполняет роль буфера назначения. Буфер назначения должен быть буфером массива символов. Он должен быть больше суммарного размера двух строк: той которая в нём уже есть и той которая копируется Пример: char str[80]; strcpy(str, "these "); strcat(str, "strings "); strcat(str, "are "); strcat(str, "concatenated."); ❗️Возвращаемое значение strcat можно просто игнорировать, оно просто возвращает тот же указатель, который был передан в качестве первого аргумента strcat(strcat(str, foo), bar); Из всего выше сказанного объединить две строки можно с помощью char *foo = "foo"; char *bar = "bar"; char str[80]; strcpy(str, "TEXT "); strcat(str, foo); strcat(str, bar);
4 53318Loading...
10
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом. Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций. Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах. 👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
1 2021Loading...
11
🔮 Что вернёт a[10] == 10 [a]? Стандарт Си определяет [] как оператор следующим образом: a[b] == *(a + b) Следовательно , a[5] будет вычисляться как: *(a + 10) а 10[a] будет вычисляться как *(10 + a) a - указатель на первый элемент массива. a[10] - это значение, которое на 10 элементов дальше от a, что совпадает с *(a + 10)
1 14710Loading...
12
🔮 В чем разница между статическим выделением памяти и динамическим выделением памяти? - Статическое выделение памяти выполняется во время компиляции и не потребляет ресурсов ЦП; динамическое выделение памяти выполняется во время выполнения, а для выделения и освобождения требуются ресурсы ЦП - Динамическое выделение памяти может привести к утечке памяти - Для выделения статической памяти не требуется поддержка указателей. Для динамического выделения памяти требуется - Статическое выделение памяти выполняется по плану, и размер блока памяти определяется перед компиляцией. Динамическое выделение памяти выполняется по мере необходимости - Статическое выделение памяти дает контроль над памятью компилятору. Динамическое выделение памяти дает контроль над памятью программисту
1 26011Loading...
13
🌳 Разница между кучей и стеком • Стек непрерывен, но куча не обязательно непрерывна • Существуют разные способы применения.Стек автоматически выделяется операционной системой, а кучей приходится управлять вручную • Стек растет от большего адреса к меньшему, куча растет от меньшего адреса к большему • Временем жизни стека управляет система и в большинстве случаев доступ к нему более быстрый. Куча же может распределяться неравномерно по памяти и подвержена внутренней фрагментации
1 36611Loading...
14
С детства интересуют технологии? 🤖 Не знаешь где получить образование будущего? Крупнейший образовательный центр «Алабуга Политех» приглашает освоить престижный профиль «Аэронавигация и программирование БПЛА» для выпускников 9-11 классов ✈️ Обучение в центре будет проходить по дуальной системе: работа + обучение в колледже.   Лучшие условия для специалистов будущего: 🔵бесплатное обучение 🔵зарплата до 160 000 рублей 🔵проживание в современных ЖК С первого курса студенты официально трудоустраиваются и оттачивают свои навыки на высокотехнологичном производстве под руководством опытных инженеров-наставников. 👉🏻 Пройди отбор и стань высококлассным специалистом, востребованным на рынке труда! Подавай заявку на поступление в «Алабуга Политех». Реклама. ИП Кочеткова Кристина Сергеевна, ИНН 632141702900. Erid 2VtzqxWSgvN
8144Loading...
15
❓ Как получить размер файла в байтах? В C++17 была добавлена библиотека filesystem, которая упрощает работу с файловой системой #include <filesystem> int main() { std::uintmax_t size = std::filesystem::file_size("file.txt"); } ❗️Стоит учитывать, что если файл был открыт не только вами, то размер может быть изменён извне
1 4396Loading...
16
Нет времени объяснять! Осталась всего пара дней до закрытия регистрации на самое масштабное событие в IT-сфере. Уже 17 мая пройдет конференция МТС True Tech Day. Что будет: - Выступления топовых экспертов из МТС, Яндекса, Ozon, Авито и других передовых компаний. - Более 50 докладов про архитектуру, облачные платформы, NLP4Code, вероятностное. программирование, безопасность контейнеров и другое. - 10 часов нетворкинга. - Цифровые зоны и digital-развлечения. - А после – грандиозная вечеринка со звездой. Участвуй онлайн! Регистрируйся прямо сейчас на True Tech Day.
7940Loading...
17
❓В каких случаях применяется инициализация нулями? - Статические переменные (static), глобальные и thread_local thread_local int a; // thread_local int b; // global struct Test { static int test; // static }; int Test::test; - Если мы инициализируем default значениями примитивных типов void dunc(int t){} f(int()); - Для явно не инициализированных Си-массивов char a[5] = "123"; // a[3] = a[4] = 0
1 4766Loading...
18
🌟 Выведение размера массива Для std::array размер в общем случае задаётся вручную std::array<int, 2> test{ 2,3 }; Начиная с C++17 можно оставить вывод размера компилятору std::array test{ 2,3 }; Но если необходимо использовать шаблоны, то можно воспользоваться шаблонной магией template<typename T, size_t N> int size(const std::array<T, N>& types) {     return N; }
1 40212Loading...
19
❓Хотите освоить Rust и научиться работать с многопоточностью и асинхронностью? Начните с бесплатного практического вебинара «Типы многопоточности и асинхронность в Rust» от Отус. ✨На вебинаре мы разберем: - какой код быстрее — многопоточный или асинхронный; - правда ли, что половина самых быстрых web-фреймворков написаны на Rust; - подходы к асинхронному программированию в Rust; Открытый урок будет полезен как новичкам, которые выбирают язык для изучения, так и опытным разработчикам, которые хотят расширить технологический стек. Встречаемся 23 мая в 17:00 мск в преддверии старта курса «Rust Developer. Basic». Все участники вебинара получат специальную цену на обучение на полноценном курсе! ➡ Регистрация на вебинар: https://vk.cc/cwPlHL 🤝 Записывайтесь сейчас, а мы потом напомним. Участие бесплатно. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru Erid 2Vtzqw6UUev
7693Loading...
20
Самые полезные каналы для программистов в одной подборке! Сохраняйте себе, чтобы не потерять 💾 🔥Для всех Библиотека программиста — новости, статьи, досуг, фундаментальные темы Книги для программистов IT-мемы Proglib Academy — тут мы рассказываем про обучение и курсы 🤖Про нейросети Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка Библиотека нейротекста | ChatGPT, Gemini, Bing Библиотека нейровидео | Sora AI, Runway ML, дипфейки Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion #️⃣C# Книги для шарпистов | C#, .NET, F# Библиотека шарписта — полезные статьи, новости и обучающие материалы по C# Библиотека задач по C# — код, квизы и тесты Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel ☁️DevOps Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps Вакансии по DevOps & SRE Библиотека задач по DevOps — код, квизы и тесты Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования 🐘PHP Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP Вакансии по PHP, Symfony, Laravel Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования Библиотека задач по PHP — код, квизы и тесты 🐍Python Библиотека питониста — полезные статьи, новости и обучающие материалы по Python Вакансии по питону, Django, Flask Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования Библиотека задач по Python — код, квизы и тесты ☕Java Книги для джавистов | Java Библиотека джависта — полезные статьи по Java, новости и обучающие материалы Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования Библиотека задач по Java — код, квизы и тесты Вакансии для java-разработчиков 👾Data Science Книги для дата сайентистов | Data Science Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования Библиотека задач по Data Science — код, квизы и тесты Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту 🦫Go Книги для Go разработчиков Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования Библиотека задач по Go — код, квизы и тесты Вакансии по Go 🧠C++ Книги для C/C++ разработчиков Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++ Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования Библиотека задач по C++ — код, квизы и тесты Вакансии по C++ 💻Другие каналы Библиотека фронтендера Библиотека мобильного разработчика Библиотека хакера Библиотека тестировщика Вакансии по фронтенду, джаваскрипт, React, Angular, Vue Вакансии для мобильных разработчиков Вакансии по QA тестированию InfoSec Jobs — вакансии по информационной безопасности 📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈 Также у нас есть боты: Бот с IT-вакансиями Бот с мероприятиями в сфере IT Мы в других соцсетях: 🔸VK 🔸YouTube 🔸Дзен 🔸Facebook * 🔸Instagram * * Организация Meta запрещена на территории РФ
1 1836Loading...
21
🧨 Как установить, очистить и переключить один бит? ❗️Установка бита - Используется побитовый оператор OR (|), чтобы установить n-й бит number в 1 значение - Стоит помнить, что сдвиг больше, чем на ширину типа, является неопределенным поведением typedef unsigned long ulong; ulong bit_set(ulong number, ulong n) { return number | ((ulong)1 << n); } ❗️Очистка бита - Используется побитовый оператор AND (&) , чтобы установить n-й бит number в 0 значение - Вы должны инвертировать битовую строку с помощью побитового оператора NOT (~) , затем оператор & ulong bit_clear(ulong number, ulong n) { return number & ~((ulong)1 << n); } ❗️Переключение бита - Используйте побитовый оператор XOR (^) для переключения n-го бита number ulong bit_toggle(ulong number, ulong n) { return number ^ ((ulong)1 << n); } ❗️Проверка бита - Чтобы проверить бит, сдвиньте number вправо на n бит , затем воспользуйтесь & bool bit_check(ulong number, ulong n) { return (number >> n)& (ulong)1; }
1 48028Loading...
22
🌳 Как объявить интерфейс в C ++? В C++ интерфейсом можно считать класс с чисто виртуальными методами Чисто виртуальный метод - это метод класса, который определяется как виртуальный и которому присваивается значение 0 class ITest { public: virtual ~ITest() {} virtual void Method() = 0; }; class MainTest : public ITest { public: virtual void Method() override { } };
5 72830Loading...
23
🍔 Дополнительный код Дополнительный код (или two's complement) — это умный способ хранения целых чисел, позволяющий очень легко реализовать распространенные математические задачи. В основном используется потому что легко представлять отрицательные числа 🥝 Основные принципы - для нуля используем 0 - для положительных целых чисел используем значения от 1 и до 2 в степени (количество битов-1) минус 1 - для отрицательных чисел инвертируем бинарное представление и добавляем единицу — это и есть дополнительный код 🍎 Примеры (бинарное представление = значение) • 0000 = 0 • 0001 = 1 • 0010 = 2 • 1111 = -1 • 1110 = -2 • 1101 = -3
1 6227Loading...
24
🍔 В чём разница между std::endl и '\n'? ❗ Единственное существенное различие между std::endl и '\n' в том, что std::endl очищает буфер вывода и результат сразу выводится, а '\n' — это просто символ и сайдэффектов не имеет ❗ Если программа требовательная к ресурсам, то стоит пользоваться '\n' и изредка вызывать std::flush для очистки буфера
1 7377Loading...
25
🔮 Что такое обрезка объектов? Обрезка объектов (или object slicing) — это возможность присвоить объект класса-наследника экземпляру базового класса. Называется обрезкой, потому что часть информации исчезает (обрезается) class Base { int base_var; }; class Derived: public Base { int der_var; }; int main () { Base base; Derived der = base; } ❗️В примере информация об переменной der_var исчезает и её уже никак не восстановить ❗️Для решение проблемы можно использовать указатель или ссылку, тогда новый объект не создаётся, а мы просто пользуемся наследником как базовым
6 41126Loading...
26
🔮 Что такое обрезка объектов? Обрезка объектов (или object slicing) — это возможность присвоить объект класса-наследника экземпляру базового класса. Называется обрезкой, потому что часть информации исчезает (обрезается) ``` class Base { int base_var; }; class Derived: public Base { int der_var; }; int main () { Base base; Derived der = base; // информация об переменной der_var исчезает и её уже никак не восстановить } ``` ❗️Для решение проблемы можно использовать указатель или ссылку, тогда новый объект не создаётся, а мы просто пользуемся наследником как базовым
10Loading...
27
Стать профессионалом в IT, наполнить портфолио интересными проектами и успешно пройти техническое собеседование в одну из крупнейших российских IT-компаний 👨‍💻 А также развить алгоритмическое мышление и просто провести свободное время с пользой 🕺 Участвуй во Всероссийском чемпионате по алгоритмическому программированию RuCode.СТАРТ. Индивидуальный онлайн-контест пройдет уже 19 мая.
6733Loading...
28
🍊 Что такое placement new? Placement new - это специальный вид оператора new, который позволяет создать объект в уже выделенной памяти char *buffer      = new char[1024]; string *str_point = new (buffer) string("hi"); // placement new ❗️В основном необходимо, если мы не хотим запрашивать у операционной системы выделения памяти или когда у нас есть менеджер памяти и нельзя в обход него выделять память ‼️ Следует учитывать, что деструкторы для таких объектов придётся вызывать вручную, потому что при освобождении памяти они автоматически не вызоваются
2 09913Loading...
29
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом. Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций. Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах. 👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
1 8302Loading...
30
🧨 Как очистить stringstream? Для очистки содержимого строкового потока можно использовать: m.str(""); или m.str(std::string()); что может быть более эффективно, из-за того что не вызываем конструктор std::string(const char*)
5 52316Loading...
31
😱 Что такое ошибка сегментации? Ошибка сегментации (или segmentation fault) — вид ошибок связанный с обращением к памяти, которая не принадлежит процессу. Это вспомогательный механизм, который не дает вам «испортить» память и внедрить трудноотлаживаемые ошибки памяти. Когда вы получаете segfault, вы знаете, что делаете что-то не так с памятью — обращаетесь к переменной, которая уже была освобождена, записываете в часть памяти, доступную только для чтения, и т. д. Ошибка сегментации по сути одинакова в большинстве языков, позволяющих работать с памятью, принципиальной разницы между ошибками сегментации в C и C++ нет
1 8199Loading...
32
🍔 std::print() и std::println() Если есть необходимость печатать в стандартный вывод и постоянно не пользоваться std::format, которая генерирует std::string, можно использовать функции std::print() и std::println(). Они были добавлены в C++23 и также поддерживают форматирование строк
1 89316Loading...
33
🍔 Зачем нужен std::format? ❗ В функция printf нет автоматического вычитания типов, она подвержена ошибкам и не расширяема ❗Потоковые объекты (stream) очень многословны и трудно оптимизируются ‼️ В C++20 появился std::format позволяющий форматировать строки в python стиле 🍔 Особенности std::format • Безопасный для использования с разными типами (Type-safe) • Поддерживает позиционные аргументы • Расширяемость (поддержка пользовательских типов) • Возвращает std::string
1 86314Loading...
34
🔥 Время прокачивать свои навыки и RustИ !!! 🫵 Проверь себя - ответь на вопросы и узнай, хорошо ли ты знаешь Rust и его ключевые особенности. Тест является частью полноценного онлайн-курса «Rust Developer. Professional» от Отус. ➡️ ПРОЙТИ ТЕСТ: https://otus.pw/Vnto/ Почему именно сейчас в 2024 году Rust так популярен? Безопасность, высокая производительность, многопоточность и кроссплатформенность. Он подходит для создания безопасных, эффективных и многопоточных приложений на разных платформах. 💥 Бонусом за успешно пройденный тест, получишь доступ к записям открытых вебинаров курса (доступ на странице курса). Пройди тест, смотри наши вебинары и приходи учиться! Ждем. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru Erid 2VtzqwZiUWd
7661Loading...
35
🍔 Библиотека std::stacktrace В C++23 появилась библиотека std::stacktrace для получения текущего стека вызовов функций, а именно последовательность вызовов от точки входа main() С помощью библиотеки можно посмотреть описание функции description() , исходный файл в котором находится функция source file() и номер строки source line()
1 80316Loading...
🍔 Дорожная карта для изучения C с нуля • Автор делится списком полезных ресурсов для изучения Си с нуля • В статье представлены различные области, в которых автор нуждался в дополнительном разъяснении • Автор предлагает начать свой собственный проект, выбрав тему, которая действительно интересует • Для изучения внутренней части ОС x86-64 рекомендуется разработка драйвера ядра и руткита 👉 Ссылочка
Hammasini ko'rsatish...
🔥 1
✉️❌ Как завалить собеседование, даже не начав его: 8 ошибок в сопроводительных письмах Откликаетесь, но сразу получаете отказы? Не торопитесь с выводами — возможно, все дело в вашем сопроводительном письме. 👉Сопроводительное — это первое впечатление, которое мы производим на эйчара, а первое впечатление, как известно, очень важно. Собрали для вас несколько распространенных ошибок по составлению такого письма — а в статье по ссылке можно найти остальные ошибки и пример идеального сопроводительного. Кстати, вакансии можно поискать в наших профильных каналах: 🤮Data Science, анализ данных, аналитика 🤮Python 🤮Frontend
Hammasini ko'rsatish...
Photo unavailableShow in Telegram
🤯 Как простая задачка поставила в тупик программистов (и как они из него выбрались) В 2010 году пользователь Stack Overflow не справился с задачей на собеседовании. Обсуждение способов решения этого задания стало одной из самых популярных тем на платформе. Об этой истории, а также о способах решения задачи, читайте в нашей статье 👉 Ссылка 👉 Зеркало
Hammasini ko'rsatish...
1🤔 1
🍔 Отладочные макросы Отладочные макросы в C++ используются для упрощения процесса отладки и диагностики программного кода Основные отладочные макросы включают assert, static_assert и пользовательские макросы 🍓 assert Макрос assert определён в заголовочном файле <cassert> и используется для проверки логических выражений во время выполнения программы. Если выражение вернёт false, assert завершает выполнение программы и выводит сообщение об ошибке
#include <cassert>

void test(int x) {
    assert(x > 0 && "x must be positive");
    // остальной код функции
}

int main() {
    test(5);  // проходит проверку
    test(-3); // приводит к ошибке во время выполнения
    return 0;
}
🍒 static_assert static_assert введён в C++11 и позволяет проверять условия на этапе компиляции. Это особенно полезно для проверки условий, которые должны выполняться всегда, независимо от состояния программы во время выполнения
#include <type_traits>

template <typename T>
void check() {
    static_assert(std::is_integral<T>::value, "T must be an integral type");
}

int main() {
    check<int>();   // проходит проверку
    check<float>(); // ошибка компиляции: T must be an integral type
    return 0;
}
🫐 Пользовательские отладочные макросы Вы также можете определять собственные макросы для отладки, которые помогут вам выводить дополнительную информацию или выполнять специфические проверки
#include <iostream>

#define DEBUG

#ifdef DEBUG
#define DEBUG_PRINT(x) std::cout << x << std::endl
#else
#define DEBUG_PRINT(x)
#endif

int main() {
    int value = 42;
    DEBUG_PRINT("Value: " << value);
    return 0;
}
Hammasini ko'rsatish...
👍 5🔥 1
⚡️Proglib запускает канал про ИИ для генерации звука Там мы будем рассказывать про все существующие нейросети, которые генерируют музыку и голос — с пошаговыми инструкциями, инструментами и лайфхаками. ⭐️генерация голоса и музыки ⭐️замена и перевод речи ⭐️распознавание звуков 👉Подписывайтесь!
Hammasini ko'rsatish...
Что из следующего верно о шаблонах?Anonymous voting
  • 1. Шаблон — это функция C ++, которая позволяет нам писать один код для разных типов данных
  • 2. Мы можем написать одну функцию, которая может использоваться для всех типов данных
  • 3. Мы можем написать один класс или структуру, которая может использоваться для всех типов данных
  • 4. Шаблон — это пример полиморфизма во время компиляции
  • 1 и 2
  • 1, 2 и 3
  • 1, 2 и 4
  • 1, 2, 3 и 4
0 votes
🤔 7
🍔 Какая избавиться от вложенных min/max? Старый вариант использования

auto maxVal = std::max(x1, min(x2, min(x3, x4)));
Сейчас же можно использовать cписки инициализации, чтобы уменьшить вложенность
auto maxVal = std::max(({x1, x2, x3, x4});
Hammasini ko'rsatish...
👍 6
😱 В чем разница между вектором и списком? std::vector — это реальный массив, а базовая реализация std::list — это двусторонне связанный список ❗ std::vector поддерживает произвольный доступ с доступом за O(1), но производительность вставки и удаления в общем случае низкая. Но стоить отметить что вставка в конец если capacity больше size происходить за O(1) ❗Так же вставка и удаление из std::vector в узлах, отличных от хвоста, вызовет копирование памяти, в std::list такого не происходит ❗std::list не поддерживает произвольный доступ, но производительность вставки и удаления O(1) ❗std::vector хранится последовательно, список — нет ❗std::vector выделяет память сразу и увеличивает емкость в два раза, когда ее недостаточно. std::list будет обращаться за новой памятью каждый раз, когда вставляется новый узел
Hammasini ko'rsatish...
👍 4
😱 Как объединить строки в C? В Си строки - это просто массивы char'ов. Следовательно, мы не можем напрямую объединить их с другими строками Мы можем использовать strcat функцию, которая добавляет строку, на которую указывает src, в конец строки, на которую указывает dest:
char *strcat(char *dest, const char *src);
❗️dest выполняет роль буфера назначения. Буфер назначения должен быть буфером массива символов. Он должен быть больше суммарного размера двух строк: той которая в нём уже есть и той которая копируется Пример:
char str[80];
strcpy(str, "these ");
strcat(str, "strings ");
strcat(str, "are ");
strcat(str, "concatenated.");
❗️Возвращаемое значение strcat можно просто игнорировать, оно просто возвращает тот же указатель, который был передан в качестве первого аргумента
strcat(strcat(str, foo), bar);
Из всего выше сказанного объединить две строки можно с помощью
char *foo = "foo";
char *bar = "bar";
char str[80];
strcpy(str, "TEXT ");
strcat(str, foo);
strcat(str, bar);
Hammasini ko'rsatish...
👍 2
Photo unavailableShow in Telegram
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом. Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций. Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах. 👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Hammasini ko'rsatish...