es
Feedback
C/C++ | Вопросы собесов

C/C++ | Вопросы собесов

Ir al canal en Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

Mostrar más
4 213
Suscriptores
-224 horas
-127 días
-5030 días
Archivo de publicaciones
Ищу желающих заполнять карточки товаров на ВБ! Работа полностью на удаленке с зп 150 000 рублей в месяц.💰 Без опыта, нужен т
Ищу желающих заполнять карточки товаров на ВБ! Работа полностью на удаленке с зп 150 000 рублей в месяц.💰 Без опыта, нужен только телефон, занятость 3-6 часов в день Всему обучат на бесплатном курсе и после возьму на работу: ✅ 3 дня уроков по 30 минут ✅ Домашки с проверкой и оплатой бонусами ✅ Плачу 10 тыс за каждую выполненную домашку Все кто пройдет курс, получат сертификат от школы с образовательной лицензией. Набор заканчивается завтра 👍 Для регистрации жмите кнопку "Зарегистрироваться" Зарегистрироваться #реклама 16+ malkinadana.ru О рекламодателе

🤔 Когда выбросили исключение из конструктора, о чем стоит помнить? Если исключение выброшено из конструктора, деструктор объекта вызван не будет. Это требует ручного освобождения ресурсов, выделенных до момента выброса исключения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний

Kaspersky Premium со скидкой до 28% Покупайте Kaspersky Premium со скидкой до 28% и получайте гарантированные ценные подарки
Kaspersky Premium со скидкой до 28% Покупайте Kaspersky Premium со скидкой до 28% и получайте гарантированные ценные подарки от партнёров, а также возможность участовать в розыгрыше путешествия. Узнать больше #реклама 16+ kaspersky.ru О рекламодателе

🤔 Какую операцию над вектором можно сделать, которая вызовет много копирования? В C++ есть несколько операций над std::vector, которые могут привести к множественному копированию элементов. Рассмотрим основные из них. 🟠Изменение размера (`resize`) Метод resize() может вызвать множественное копирование, если новый размер вектора превышает его текущую вместимость (capacity).
#include <iostream>
#include <vector>

struct Data {
    int value;
    Data(int v) : value(v) {}
    Data(const Data& other) {  // Конструктор копирования
        value = other.value;
        std::cout << "Copying Data: " << value << std::endl;
    }
};

int main() {
    std::vector<Data> vec(3, Data(10)); // Заполняем 3 элементами
    std::cout << "Resizing..." << std::endl;
    vec.resize(10, Data(20)); // Вектор расширяется, возможны копирования
}
🟠Вставка элемента (`insert` и `emplace`) Если std::vector не имеет достаточного запаса (capacity), вставка нового элемента может привести к реаллокации и копированию всех элементов.
std::vector<int> vec = {1, 2, 3};
vec.insert(vec.begin(), 0); // Вставка в начало → все элементы сдвигаются
🟠Присваивание (`operator=`) Если один std::vector присваивается другому, все элементы копируются.
std::vector<int> vec1 = {1, 2, 3, 4, 5};
std::vector<int> vec2;
vec2 = vec1; // Копирование всех элементов
🟠Возвращение `std::vector` из функции Если возвращаем std::vector по значению, может произойти копирование (если не работает оптимизация RVO/NRVO или перемещение).
std::vector<int> createVector() {
    std::vector<int> vec(100, 42);
    return vec; // Может скопироваться, если нет RVO
}
Ставь 👍 и забирай 📚 Базу знаний

Получите 400 рублей на счет мобильного телефона Выберите Яндекс Поиск в настройках браузера, ищите в нём — и они ваши! Узнать больше #реклама 16+ portal.yandex.ru О рекламодателе

🤔 Unordered_set, unordered_map и set, map чем отличаются? 1. Set/Map: элементы хранятся в отсортированном порядке, используются бинарные деревья (обычно красно-чёрные). 2. Unordered_set/Unordered_map: элементы не сортируются, используют хеш-таблицы для быстрого доступа. 3. Set и Map медленнее на вставке/поиске (O(log N)), но позволяют итерировать в отсортированном порядке. 4. Unordered_set и Unordered_map быстрее для поиска (O(1) в среднем), но не поддерживают упорядоченный доступ. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний

Не грузится? Понимаем. Бесплатный мессенджер для вашей компании - Битрикс24. Личные и групповые чаты, видеозвонки, каналы и н
Не грузится? Понимаем. Бесплатный мессенджер для вашей компании - Битрикс24. Личные и групповые чаты, видеозвонки, каналы и нейросеть. Всё привычно и удобно. Можно перенести рабочие чаты и файлы из Telegram в Битрикс24. Начните работать на бесплатном тарифе уже сейчас. Узнать больше #реклама 16+ bitrix24.ru О рекламодателе

🤔 Какие знаешь сортировки? Существует множество алгоритмов сортировки, каждый из которых имеет свои преимущества и недостатки в зависимости от условий использования. Рассмотрим основные из них. 🟠Сортировка пузырьком (Bubble Sort) Простейший алгоритм, который многократно проходит по массиву, сравнивая соседние элементы и меняя их местами, если они стоят в неправильном порядке. Сложность: O(n²) в худшем и среднем случаях, O(n) в лучшем случае (если массив уже отсортирован). Когда использовать: Почти никогда, так как слишком медленный.
void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                std::swap(arr[j], arr[j + 1]);
            }
        }
    }
}
🟠Сортировка выбором (Selection Sort) На каждом шаге ищется минимальный элемент и ставится в начало неотсортированной части массива. Сложность: O(n²) всегда. Когда использовать: Если важна простота реализации, но нужна немного лучшая производительность, чем у пузырьковой сортировки.
void selectionSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minIdx = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIdx]) {
                minIdx = j;
            }
        }
        std::swap(arr[i], arr[minIdx]);
    }
}
🟠Сортировка вставками (Insertion Sort) Берём один элемент и вставляем его в правильное место среди уже отсортированных элементов. Сложность: O(n²) в худшем случае, O(n) в лучшем (если массив почти отсортирован). Когда использовать: Для небольших массивов или почти отсортированных данных.
void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}
🟠Сортировка слиянием (Merge Sort) Разделяем массив на две части, рекурсивно сортируем их и затем сливаем. Сложность: O(n log n) всегда. Когда использовать: Когда нужна стабильность и предсказуемая скорость работы.
void merge(int arr[], int l, int m, int r) {
    int n1 = m - l + 1, n2 = r - m;
    int L[n1], R[n2];
    for (int i = 0; i < n1; i++) L[i] = arr[l + i];
    for (int i = 0; i < n2; i++) R[i] = arr[m + 1 + i];

    int i = 0, j = 0, k = l;
    while (i < n1 && j < n2) arr[k++] = (L[i] < R[j]) ? L[i++] : R[j++];
    while (i < n1) arr[k++] = L[i++];
    while (j < n2) arr[k++] = R[j++];
}

void mergeSort(int arr[], int l, int r) {
    if (l < r) {
        int m = l + (r - l) / 2;
        mergeSort(arr, l, m);
        mergeSort(arr, m + 1, r);
        merge(arr, l, m, r);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Будьте в центре внимания — с Прайм-баннером С новым медийным форматом Прайм-баннер вы можете не просто размещать рекламу на с
Будьте в центре внимания — с Прайм-баннером С новым медийным форматом Прайм-баннер вы можете не просто размещать рекламу на самых популярных сервисах Яндекса с высоким Brand Safety, а гибко управлять кампанией: — Оптимизируйте стоимость размещения — формат доступен по аукционной модели без порога входа — Настраивайте кросс-частоту и исключайте из показов неподходящие площадки — Размещайтесь как на уже знакомых, так и на уникальных местах показа — Выбирайте нужные среди более чем 600 таргетингов без наценок — Оценивайте результаты с помощью исследований Brand Lift, Search Lift, Visit Lift и Target Lift Узнайте больше о возможностях Прайм-баннера для вашего бренда. Узнать больше #реклама 16+ yandex.ru О рекламодателе

🤔 Если std::move() не перемещает данные, то что их перемещает? Это просто явное преобразование объекта в rvalue-ссылку, что позволяет использовать семантику перемещения. Реальное перемещение выполняется методами, поддерживающими rvalue-ссылки, например, конструктором перемещения или оператором присваивания. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний

Получи грант до 3,48 млн на обучение дизайну Поступай на дизайн в Центральный университет с грантом. Для учеников 10–11-х кла
Получи грант до 3,48 млн на обучение дизайну Поступай на дизайн в Центральный университет с грантом. Для учеников 10–11-х классов и СПО. Освой графический, UI/UX и продуктовый дизайн. Создавай визуальные концепты будущего. На программе студенты получают фундаментальную базу, развивают прикладные навыки, приобретают опыт работы над реальными проектами, собирают портфолио и строят связи внутри дизайн-сообщества Подать заявку #реклама 16+ cu.ru О рекламодателе

🤔 Для чего при перегрузке оператора присваивания возвращать ссылку? При перегрузке оператора = в C++ принято возвращать ссылку на текущий объект (*this). Это позволяет цепочечное присваивание (a = b = c), а также улучшает производительность и удобство использования. 🚩Правильная сигнатура оператора `=`
class MyClass {
public:
    MyClass& operator=(const MyClass& other) {
        if (this != &other) {  // Защита от самоприсваивания
            // Копируем данные
        }
        return *this; // Возвращаем ссылку на текущий объект
    }
};
🚩Что даёт возвращение ссылки (`T&`)? Поддержка цепочки присваивания (a = b = c)
a = b = c;  // Интерпретируется как a = (b = c);
Пример
#include <iostream>

class MyClass {
public:
    int value;
    MyClass(int v) : value(v) {}

    MyClass& operator=(const MyClass& other) {
        if (this != &other) { // Защита от самоприсваивания
            value = other.value;
        }
        return *this;
    }
};

int main() {
    MyClass a(1), b(2), c(3);
    a = b = c; // Работает, потому что `b = c` возвращает ссылку на `b`
    std::cout << "a: " << a.value << ", b: " << b.value << ", c: " << c.value << std::endl;
}
Вывод
a: 3, b: 3, c: 3
🟠Убираем лишнее копирование (повышаем производительность) Если оператор = вернёт не ссылку, а объект, то произойдёт лишнее копирование. Плохо (возвращаем объект, а не ссылку)
MyClass operator=(const MyClass& other) { // ⚠️ Ошибка: возвращаем объект
    value = other.value;
    return *this; // Здесь создаётся временный объект (лишняя копия!)
}
Хорошо (возвращаем T&)
MyClass& operator=(const MyClass& other) { // ✅ Возвращаем ссылку
    value = other.value;
    return *this;
}
🚩Поддержка `if (a = b)` Если оператор = вернёт ссылку, мы можем использовать его в условии:
if ((a = b).value == 42) { // ОК
    std::cout << "Присваивание выполнено, a == 42";
}
🚩Что если вернуть `void`? Если оператор = вернёт void, цепочка a = b = c; не будет работать.
class MyClass {
public:
    void operator=(const MyClass& other) { // ⚠️ Ошибка!
        value = other.value;
    }
};

int main() {
    MyClass a, b, c;
    a = b = c; // ❌ Ошибка: `b = c` возвращает void, а `a = void` не работает!
}
Ставь 👍 и забирай 📚 Базу знаний

Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с пр
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! — 4 офлайн программы по востребованным направлениям ИТ — 2 онлайн-программы: машинное обучение и продуктовый менеджмент — 550 грантов до 75% — Вечерние занятия и учеба по выходным — удобно совмещать с работой — Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса — Возможность стажировок и трудоустройства в ведущих компаниях — Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Зарегистрироваться #реклама 16+ cu.ru О рекламодателе

🤔 О чем следует помнить при вызове исключений в конструкторе? - Исключения из конструктора предотвращают создание объекта. - Деструкторы членов класса или базового класса должны корректно освобождать ресурсы. - Лучше избегать сложной логики, которая может выбрасывать исключения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний

Запустите рекламу в телеграм-каналах через Яндекс Директ Перфоманс-реклама в мессенджере продолжает работать: • Таргетинг по
Запустите рекламу в телеграм-каналах через Яндекс Директ Перфоманс-реклама в мессенджере продолжает работать: • Таргетинг по тематикам и регионам • Умный подбор каналов • Гибкие модели оплаты (CPC и CPV) Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Сколько места занимают bool, char, short, int, long long, float, double? - bool: 1 байт. - char: 1 байт. - short: 2 байта. - int: 4 байта. - long long: 8 байт. - float: 4 байта. - double: 8 байт. Эти значения могут варьироваться в зависимости от платформы и компилятора. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний

Магистратура ИТМО для фронтенд и бэкенд разработчиков Выберите язык программирования и уровень. Регулируемая нагрузка. Экспер
Магистратура ИТМО для фронтенд и бэкенд разработчиков Выберите язык программирования и уровень. Регулируемая нагрузка. Эксперты Яндекса учат. Реальные кейсы. Государственный диплом. Оставьте заявку Перейти на сайт #реклама 16+ practicum.yandex.ru О рекламодателе

🤔 В чем разница vector и list? Vector в C++ представляет собой динамический массив с последовательным размещением элементов в памяти, что обеспечивает быстрый доступ по индексу. List — это двусвязный список, где каждый элемент хранит указатели на соседние элементы, что обеспечивает быструю вставку и удаление. Вставка и удаление в vector могут быть медленными из-за необходимости сдвига элементов, тогда как в list такие операции происходят быстрее. Однако доступ по индексу в list требует обхода элементов, что делает его медленнее для случайного доступа. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚Базу знаний

Нужны 7 желающих для работы с искусственным интеллектом. Требования: 18-45 лет Работа из дома. График свободный. Пришло задан
Нужны 7 желающих для работы с искусственным интеллектом. Требования: 18-45 лет Работа из дома. График свободный. Пришло задание — изучили — выполнили — получили свои деньги. Деньги вы получаете в зависимости от сложности задания. Например: За задание могут платить 500-10.000 рублей. 500 рублей — это около 5-30 минут. 10 000 руб. это 5-6 часов. Работа может быть разной: Оживить фото, создать видео, реставрировать старое фото и т.д. 💰 В среднем новичок получает до 150.000 руб в месяц. А опытный может и 300-500т. Мы обучим вас сами: — 3 дня уроков по 30 минут — Домашки с проверкой и оплатой бонусами — Платим 10 тыс за каждую выполненную домашку ⚡ Набор заканчивается завтра. Для регистрации жмите кнопку "Зарегистрироваться": Зарегистрироваться #реклама 16+ course.neurogansta.ru О рекламодателе

🤔 Чем отличаются STL контейнеры vector и array? Это контейнеры из стандартной библиотеки, но у них есть важные различия в управлении памятью, гибкости и производительности. 🟠Различия в управлении памятью std::vector использует динамическую память, выделяемую в куче (heap). Его размер может изменяться во время выполнения. std::array использует статическую память, выделяемую в стеке (stack) или в статической области памяти, и его размер фиксирован на этапе компиляции.
#include <vector>
#include <array>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3}; // Размер может изменяться динамически
    vec.push_back(4);                 // Добавляем новый элемент

    std::array<int, 3> arr = {1, 2, 3}; // Размер фиксирован, нельзя добавить новый элемент

    std::cout << "Vector size: " << vec.size() << std::endl; // Выведет 4
    std::cout << "Array size: " << arr.size() << std::endl;  // Выведет 3

    return 0;
}
🟠Гибкость и изменение размера std::vector позволяет изменять размер в процессе работы, автоматически выделяя новую память при необходимости. std::array имеет фиксированный размер, который нельзя изменить после создания.
std::vector<int> v = {1, 2, 3};
v.push_back(4); // Увеличиваем размер

std::array<int, 3> a = {1, 2, 3};
// a.push_back(4); // Ошибка! У std::array нет метода push_back
🟠Производительность std::array работает быстрее, так как все данные хранятся в непрерывном участке памяти и нет затрат на динамическое выделение. std::vector может требовать дополнительное время при изменении размера, так как может потребоваться новое выделение памяти и копирование элементов.
#include <vector>
#include <array>
#include <chrono>
#include <iostream>

int main() {
    constexpr int N = 1'000'000;
    
    std::vector<int> vec(N, 1); // Динамический массив
    std::array<int, N> arr{};   // Статический массив
    
    auto start = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < N; ++i) vec[i] += 1;
    auto end = std::chrono::high_resolution_clock::now();
    std::cout << "Vector time: " 
              << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() 
              << " us" << std::endl;

    start = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < N; ++i) arr[i] += 1;
    end = std::chrono::high_resolution_clock::now();
    std::cout << "Array time: " 
              << std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() 
              << " us" << std::endl;

    return 0;
}
🟠Совместимость с C-API std::array хранит данные как обычный C-массив, поэтому можно легко передавать его в функции, ожидающие int*. std::vector использует динамическую память, но можно получить указатель на внутренний буфер с помощью data().
void processArray(int* arr, size_t size) {
    for (size_t i = 0; i < size; ++i) {
        std::cout << arr[i] << " ";
    }
}

int main() {
    std::array<int, 3> arr = {1, 2, 3};
    std::vector<int> vec = {4, 5, 6};

    processArray(arr.data(), arr.size()); // std::array можно передавать в C-функции
    processArray(vec.data(), vec.size()); // std::vector тоже можно передавать

    return 0;
}
🟠Итераторы и стандартные алгоритмы Оба контейнера поддерживают итераторы и совместимы со стандартными алгоритмами из #include <algorithm>
#include <iostream>
#include <vector>
#include <array>
#include <algorithm>

int main() {
    std::vector<int> vec = {3, 1, 4, 1, 5};
    std::array<int, 5> arr = {3, 1, 4, 1, 5};

    std::sort(vec.begin(), vec.end());
    std::sort(arr.begin(), arr.end());

    for (int n : vec) std::cout << n << " "; // 1 1 3 4 5
    std::cout << std::endl;
    for (int n : arr) std::cout << n << " "; // 1 1 3 4 5

    return 0;
}
Ставь 👍 и забирай 📚 Базу знаний