C/C++ | Вопросы собесов
前往频道在 Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
显示更多4 197
订阅者
-324 小时
-127 天
-5630 天
帖子存档
Получите 400 рублей на счет мобильного телефона
Выберите Яндекс Поиск в настройках браузера, ищите в нём — и они ваши!
Узнать больше
#реклама 16+
portal.yandex.ru
О рекламодателе
🤔 Когда нужно объявлять деструктор виртуальным?
Деструктор должен быть виртуальным, если класс предназначен для использования в качестве базового, и предполагается полиморфное удаление через указатель (Base* ptr = new Derived; delete ptr;). Без виртуального деструктора деструкторы производных классов не будут вызваны, что приведет к утечке памяти.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу знаний
Хотите внедрить ИИ, но не знаете с чего начать?
ГигаАкадемия запустила ИИ-менторинг — индивидуальную сессию с практикующим экспертом для собственников и бенефициаров.
Никакой теории. Только вы, эксперт и ваша задача.
Три часа фокуса на вашем запросе.
Ментор разбирает процессы, данные и ограничения и помогает определить, где ИИ быстрее всего даст бизнес-эффект и повлияет на рост выручки.
Вы уходите не с вдохновением, а с планом:
— карта вашего ИИ-кейса: задача, эффект, риски
— 3 приоритетных сценария — где ценность выше, а запуск проще
— дорожная карта пилота на 2–6 недель
Цель ментора — усилить вашу экспертизу: научить самостоятельно находить, оценивать и запускать ИИ-решения.
ИИ уже готов работать на вас. А вы готовы взять его в партнёры?
Оставьте заявку на сайте и получите консультацию.
Узнать больше
Номер реестровой записи: С502024004938.
#реклама 16+
sberuniversity.ru
О рекламодателе
🤔 Как сделать операцию удаления элемента из начала, если порядок элементов не важен, в vector?
Иногда требуется удалить элемент из начала контейнера std::vector, когда порядок элементов не важен. Операция удаления первого элемента может быть затратной по времени, поскольку требует сдвига всех последующих элементов. Чтобы минимизировать эти затраты, можно заменить первый элемент последним и затем удалить последний элемент.
🚩Как это используется?
Этот подход позволяет выполнить операцию удаления за постоянное время O(1) вместо линейного O(n).
🚩Пример
void removeFirstElement(std::vector<int>& vec) {
if (!vec.empty()) {
std::swap(vec.front(), vec.back()); // Обмен первого и последнего элементов
vec.pop_back(); // Удаление последнего элемента
}
}
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::cout << "Before removal: ";
for (int i : vec) {
std::cout << i << " ";
}
std::cout << std::endl;
removeFirstElement(vec);
std::cout << "After removal: ";
for (int i : vec) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
Ставь 👍 и забирай 📚 Базу знанийБлоки для строительства от производителя с доставкой
Блоки из полистиролбетона – это современный строительный материал, имеющий ряд преимуществ перед традиционными строительными блоками.
✨ Материал позволяет снизить теплопотери, улучшить звукоизоляцию и значительно упростить процесс возведения зданий, является прочным прочными и легким, что делает его выгодным решением для различных проектов.
✅ Заказывайте! Доставка по Уралу!
Узнать больше
#реклама
avant-pkf.ru
О рекламодателе
🤔 Что лежит в основе работы unordered_set, unordered_map и set, map?
1. Set и Map: основаны на сбалансированных бинарных деревьях, обычно красно-чёрных. Они поддерживают упорядоченность данных.
2. Unordered_set и Unordered_map: основаны на хеш-таблицах, обеспечивающих быструю вставку, удаление и поиск.
3. Основной принцип различия — структура данных: деревья для упорядоченности, хеш-таблицы для скорости.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу знаний
МТС Линк. Всё для коммуникации в команде
💻Платформа для общения, работы и обучения онлайн с поддержкой ИИ
Встречи, чаты и звонки в одном приложении
✅МТС Линк доступен в AppStore. Берите работу с собой и оставайтесь на связи с коллегами в любое время
Зарегистрироваться
#реклама 16+
mts-link.ru
О рекламодателе
🤔 Что такое наследование?
Это фундаментальное понятие ООП, которое позволяет одному классу (производный или дочерний класс) наследовать свойства и методы другого класса (базовый или родительский класс). Наследование позволяет расширять или модифицировать функционал уже существующих классов без их повторного написания.
🚩Основные аспекты
🟠Повторное использование кода
Позволяет производным классам использовать код базового класса. Это способствует снижению дублирования кода и увеличивает его повторное использование.
🟠Расширяемость
Делает систему более гибкой, так как позволяет создавать новые классы на основе уже существующих. Это помогает в адаптации и расширении функциональности системы.
🟠Иерархия
Вводит естественную организацию, создавая иерархическую структуру классов. Это упрощает понимание отношений между различными классами и их взаимодействия.
🟠Полиморфизм
Является ключом к полиморфизму, где методы производного класса могут переопределять методы базового класса. Это позволяет использовать производные объекты вместо базовых объектов, что делает программу более модульной.
🚩Типы
🟠Одиночное наследование
Класс наследуется от одного базового класса.
🟠Множественное наследование
Класс может наследоваться от более чем одного класса. Не все языки поддерживают множественное наследование из-за сложности разрешения различных аспектов, таких как ромбовидное наследование (diamond problem).
🟠Многоуровневое наследование
Формируется когда класс наследуется от другого производного класса, формируя многоуровневую структуру.
#include <iostream>
using namespace std;
// Базовый класс
class Animal {
public:
void eat() {
cout << "I can eat!" << endl;
}
};
// Производный класс
class Dog : public Animal {
public:
void bark() {
cout << "I can bark! Woof woof!" << endl;
}
};
int main() {
Dog myDog;
myDog.eat(); // Вызов метода базового класса
myDog.bark(); // Вызов метода производного класса
return 0;
}
Ставь 👍 и забирай 📚 Базу знанийПолучи грант до 1,35 млн руб. на обучение в магистратуре
Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой?
Поступай в магистратуру Центрального университета!
— 4 офлайн программы по востребованным направлениям ИТ
— 2 онлайн-программы: машинное обучение и продуктовый менеджмент
— 550 грантов до 75%
— Вечерние занятия и учеба по выходным — удобно совмещать с работой
— Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса
— Возможность стажировок и трудоустройства в ведущих компаниях
— Государственный диплом за 2 года
Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас!
Зарегистрироваться
#реклама 16+
cu.ru
О рекламодателе
🤔 Из чего состоит shared_ptr?
shared_ptr состоит из указателя на объект и счетчика ссылок, управляющего временем жизни объекта. Когда количество ссылок становится нулевым, shared_ptr автоматически удаляет объект. Он также поддерживает совместное использование ресурсов между несколькими владельцами, что делает его удобным для совместного владения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу знаний
Авто из Японии под Новый Утильсбор до 160 л.с.
Список готовых к пригону авто в нашем Telegram. С ценами под ключ👌
Видео-отзывы клиентов✅
Никаких 100% предоплат✅
Оплата по этапам✅
Только проверенные авто✅
Узнать больше
#реклама 16+
tgryx.ru
О рекламодателе
🤔 В какой момент принимается решение, что хеш таблице надо перестроиться?
Решение о необходимости перестроения (рехеширования) хэш-таблицы принимается на основе значения нагрузки (load factor). Нагрузка — это отношение количества элементов в хэш-таблице к количеству бакетов (размеру массива).
🚩Порог нагрузки
Для каждой хэш-таблицы обычно определяется пороговое значение нагрузки. Когда фактическая нагрузка превышает это пороговое значение, происходит рехеширование.
Формула нагрузки:
\text{load factor} = \frac{\text{number of elements}}{\text{size of table}}
Типичные пороговые значения: Пороговое значение нагрузки часто устанавливается в пределах от 0.5 до 1.0, в зависимости от реализации. Например, std::unordered_map в стандартной библиотеке C++ по умолчанию использует пороговое значение 1.0.
🚩Процесс рехеширования
1⃣Увеличение размера таблицы
Размер массива увеличивается, часто в два раза.
2⃣Перераспределение элементов
Все существующие элементы перераспределяются в новую таблицу с использованием новой хэш-функции или той же хэш-функции, но с новым размером таблицы.
🚩Пример
#include <iostream>
#include <list>
#include <vector>
class HashTable {
private:
int currentSize;
int numberOfElements;
double loadFactorThreshold;
std::vector<std::list<std::pair<int, std::string>>> table;
void rehash() {
int oldSize = currentSize;
currentSize *= 2; // Увеличиваем размер таблицы
std::vector<std::list<std::pair<int, std::string>>> newTable(currentSize);
for (const auto& list : table) {
for (const auto& pair : list) {
int hashValue = pair.first % currentSize;
newTable[hashValue].emplace_back(pair.first, pair.second);
}
}
table = std::move(newTable);
}
public:
HashTable(int size = 10, double threshold = 0.75)
: currentSize(size), numberOfElements(0), loadFactorThreshold(threshold) {
table.resize(currentSize);
}
int hashFunction(int key) {
return key % currentSize;
}
void insertItem(int key, std::string value) {
int hashValue = hashFunction(key);
table[hashValue].emplace_back(key, value);
numberOfElements++;
// Проверяем, нужно ли выполнять рехеширование
if (static_cast<double>(numberOfElements) / currentSize > loadFactorThreshold) {
rehash();
}
}
void displayTable() {
for (int i = 0; i < currentSize; i++) {
if (!table[i].empty()) {
std::cout << "Bucket " << i << ": ";
for (auto& pair : table[i]) {
std::cout << "[" << pair.first << ": " << pair.second << "] ";
}
std::cout << std::endl;
}
}
}
};
int main() {
HashTable ht;
ht.insertItem(1, "one");
ht.insertItem(2, "two");
ht.insertItem(11, "eleven"); // Триггер рехеширования при необходимости
ht.displayTable();
// Вывод:
// Bucket 1: [1: one]
// Bucket 2: [2: two]
// Bucket 11: [11: eleven]
return 0;
}
🚩Когда происходит
Рехеширование обычно инициируется в момент, когда после добавления нового элемента нагрузка превышает установленное пороговое значение. Это гарантирует, что хэш-таблица будет эффективно обрабатывать операции поиска, вставки и удаления, поддерживая амортизированное постоянное время для этих операций.
Ставь 👍 и забирай 📚 Базу знанийТворческая профессия без опыта: шаг, меняющий многое
Нет художественного образования? Не знаешь, с чего начать? Думаешь «это не для меня» или «я уже опоздала»?
Все меняется с одного простого шага — нужно разрешить себе попробовать.
Именно поэтому я создала бесплатный курс для женщин, которым хочется перемен. Тех, кто ищет дело по душе, тянется к красоте и хочет попробовать что-то новое. Спокойно, без вложений, с поддержкой.
На бесплатном 14-дневном курсе по дизайну интерьера с нуля ты узнаешь:
— как выбирать правильные материалы;
— какие инструменты использовать при работе над проектами;
— секреты создания гармоничного пространства.
За две недели у тебя на руках будет готовый дизайн-проект реальной квартиры. И все это бесплатно.
Запишись на практический курс. И проверь, может, ты следующая, кто скажет: «я нашла себя»❤️
Зарегистрироваться
#реклама 16+
diskill-design.ru
О рекламодателе
🤔 Что будет, если вызвать оператор delete на nullptr?
Если вызвать оператор delete на nullptr, ничего не произойдет. Это безопасная операция, так как стандарт гарантирует, что освобождение nullptr не вызовет ошибок или исключений.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу знаний
Директ возвращает 10% бюджета за рекламу в мессенджерах
Запускайте кампании в Telegram и МАКС с 1 июня по 31 августа — получайте кешбэк 10%. Его можно потратить на новые кампании. 💰
Как получить кешбэк:
— Заполните форму: укажите логин в Директе и что продвигаете (сайт или канал);
— Запустите рекламу в МАКС, Telegram или сразу на двух площадках с оплатой за клики;
— В сентябре начислим кешбэк.
Получить предложение
#реклама
yandex.ru
О рекламодателе
🤔 В чем разница map и unordered_map?
std::map и std::unordered_map – оба являются ассоциативными контейнерами в C++, но они устроены по-разному и имеют разные скорости работы.
🚩Как устроены контейнеры?
🟠`std::map` – красно-чёрное дерево (сбалансированное BST)
Все ключи хранятся упорядоченно.
Операции insert, erase, find выполняются за O(log n).
Упорядоченность важна, если требуется поиск в диапазоне (lower_bound, upper_bound).
#include <map>
#include <iostream>
int main() {
std::map<int, std::string> m;
m[2] = "B";
m[1] = "A";
m[3] = "C";
for (const auto& [key, value] : m) {
std::cout << key << " -> " << value << '\n';
}
}
Вывод (отсортирован!)
1 -> A 2 -> B 3 -> C🟠`std::unordered_map` – хеш-таблица Нет сортировки, но поиск выполняется быстро – O(1) (в среднем). Использует хеш-функцию, поэтому доступ к элементам зависит от хеширования. Может быть медленным при коллизиях (O(n) в худшем случае).
#include <unordered_map>
#include <iostream>
int main() {
std::unordered_map<int, std::string> um;
um[2] = "B";
um[1] = "A";
um[3] = "C";
for (const auto& [key, value] : um) {
std::cout << key << " -> " << value << '\n';
}
}
Вывод (порядок непредсказуем!)
2 -> B 1 -> A 3 -> C🚩Когда использовать `map`, а когда `unordered_map`? 🟠Используйте `std::map`, если: Нужно сортированное хранение ключей. Требуется поиск по диапазону (
lower_bound, upper_bound).
Хеш-функция для ключей сложна или недоступна (например, std::pair без кастомного хешера).
Ставь 👍 и забирай 📚 Базу знанийМТС Линк. Оборудование для ВКС и переговорных комнат
Быстрая настройка по формату: презентация, мозговой штурм, совещание.
Гарантированная конфиденциальность мероприятий.
Ускоренное принятие решений и сбор участников в разных часовых поясах.
МТС Линк — оборудование и ПО для переговорных комнат под ключ:
✅ Интерактивные панели и экраны
✅ Камеры, микрофоны и спикерфоны
✅ Акустические системы и терминалы
Готовые комплекты для залов любого размера: от компактных до очень больших.
Тест оборудования 2 недели бесплатно.
⚡ Получите консультацию бесплатно
Получить консультацию
#реклама 16+
mts-link.ru
О рекламодателе
🤔 Как работает счетчик у shared_ptr?
Счетчик ссылок в `std::shared_ptr` увеличивается каждый раз, когда новый `shared_ptr` создается с указателем на объект, и уменьшается, когда `shared_ptr` уничтожается или перестает указывать на объект. Когда счетчик достигает нуля, объект уничтожается.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу знаний
Внимание! Доступная онлайн-профессия с зп до 150.000 руб
Нужно заполнять карточки товаров на ВБ, писать описания товаров и отвечать на отзывы. Все это вы делаете из дома.
Опыт, знания и город — не важны! От вас требуется только телефон.
Занятость 3-4 часа в день.
График свободный. Заработок зависит от вас.
Для старта в профессии нужно пройти бесплатное 3х-дневное обучение.
✅ Все проходит онлайн по 30-40 минут в день.
✅ Поймете всю суть работы с нуля от А до Я
✅ Все бесплатно. От вас только желание работать и зарабатывать.
Всего осталось 30 мест. Успевайте зарегистрироваться, пока есть возможность:
Зарегистрироваться
#реклама 16+
course.wildmanager.ru
О рекламодателе
🤔 Асимптотическая сложность в list?
std::list — это двусвязный список, где каждый элемент хранит ссылку на предыдущий и следующий элементы. Это даёт эффективное добавление и удаление элементов в любой части списка, но делает доступ по индексу медленным
🚩Разбор операций в `std::list` с примерами
Добавление в начало и конец — O(1)
std::list<int> lst;
lst.push_back(10); // O(1)
lst.push_front(5); // O(1)
Доступ по индексу — O(n)
auto it = std::next(lst.begin(), 2); // O(n), приходится идти от начала
std::cout << *it << std::endl;
Вставка и удаление по итератору — O(1)
auto it = lst.begin();
std::advance(it, 1); // Двигаем итератор на 1 элемент (O(n))
lst.insert(it, 8); // O(1), просто меняем указатели
lst.erase(it); // O(1), просто изменяем ссылки соседних элементов
Поиск элемента — O(n)
auto it = std::find(lst.begin(), lst.end(), 8); // O(n)
Сортировка — O(n log n)
lst.sort(); // O(n log n), потому что используется сортировка слиянием
Ставь 👍 и забирай 📚 Базу знаний