С++ Собеседования
1.07K subscribers
30 photos
2 links
по всем вопросам @haarrp
Download Telegram
Что выведет код сверху?
Anonymous Quiz
26%
30
23%
36
10%
42
41%
35
std::find_if

std::find_if — это стандартный алгоритм, предоставляемый библиотекой . Этот алгоритм предназначен для поиска первого элемента в заданном диапазоне, который удовлетворяет заданному условию, определенному предикатом.

Вот общий формат std::find_if:

#include

template
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p);

first и last представляют диапазон элементов для поиска. first указывает на начало диапазона, а last указывает за его пределы.
p — это унарный предикат, то есть функция, принимающая один аргумент и возвращающая true, если элемент удовлетворяет условию, и false в противном случае.
Библиотечный метод

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

Формат входных данных:
На первой строке дано целое число n (1 ≤ n ≤ 100) — количество элементов в массиве. На второй строке задан сам массив: последовательность натуральных чисел, не превышающих 10^9.

Формат выходных данных:
В выходной файл выведите строки (по количеству вставок) по n чисел каждая.
Что выведет код сверху?

Эта программа завершится аварийно. throw 32 начнет раскручивать стек и уничтожит класс A. Деструктор класса A выдаст еще одно исключение во время обработки исключения, что приведет к сбою программы. Этот вопрос проверяет, есть ли у разработчика опыт работы с исключениями.
Pcap

Pcap — это библиотека для захвата и анализа сетевого трафика.

Она используется для:
- Сниффинга сети;
- Анализа протоколов;
- Отладки сетевых приложений.

Код из примера открывает устройство для захвата пакетов, в цикле считывает пакеты и выводит их длину.
📋 Windowing method (Метод скользящего окна)

Метод скользящего окна — это подход к решению популярного типа алгоритмических задач

🔍 Принцип работы
• Определите размер окна (количество элементов данных в окне)
• Передвигайте окно по последовательности данных
• Вычисляйте интересующие вас значение
Что такое Uniform initialization? Aggregate initialization?

Uniform initialization, введенная в C++11, позволяет использовать единый синтаксис для инициализации переменных и объектов, начиная от примитивных типов до агрегатов¹. Другими словами, она вводит инициализацию скобками, которая использует фигурные скобки {} для заключения значений инициализатора. Синтаксис выглядит следующим образом: type var_name {arg1, arg2, ....arg n}.

Aggregate initialization - это форма инициализации списком для массивов или типов класса (часто структур или объединений), которые имеют: нет приватных или защищенных членов, нет пользовательских конструкторов, кроме явно заданных или удаленных конструкторов . Это позволяет напрямую инициализировать элементы агрегатов. Для этого мы предоставляем список инициализаторов в качестве инициализатора, который представляет собой список значений, разделенных запятыми.

Например, если у вас есть структура с несколькими членами:
struct Employee {
int id {};
int age {};
double wage {};
};


Когда мы определяем объект с типом структуры, нам нужен способ инициализации нескольких членов во время инициализации:
Employee joe; // как мы инициализируем joe.id, joe.age и joe.wage?

Агрегаты используют форму инициализации, называемую агрегатной инициализацией, которая позволяет нам напрямую инициализировать элементы агрегатов. Для этого мы предоставляем список инициализаторов в качестве инициализатора, который представляет собой список значений, разделенных запятыми. Так же как обычные переменные могут быть скопированы, напрямую инициализированы или списком инициализированы, есть 3 формы агрегатной инициализации.

#cpp #programming

@cppsobes
Что выведет код сверху?
Anonymous Quiz
13%
30
19%
Error
46%
870
22%
Segmentation fault
🖥 Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?


Ответ:


⚫️Явное приведение типов в C++ происходит, когда программист явно указывает, что значение одного типа должно быть преобразовано в значение другого типа. Это делается с помощью операторов приведения типов, таких как static_cast, dynamic_cast, const_cast и reinterpret_cast¹.

⚫️Неявное приведение типов в C++ происходит автоматически, когда компилятор обнаруживает, что значение одного типа используется в контексте, где ожидается значение другого типа. Например, если вы пытаетесь присвоить значение типа int переменной типа double, компилятор автоматически преобразует значение int в значение double⁴.

⚫️Ключевое слово explicit используется для предотвращения неявных преобразований¹. Оно может быть использовано с конструкторами и функциями преобразования для указания того, что они не могут использоваться для неявных преобразований и копирования инициализации.

⚫️Например, если у вас есть класс с конструктором, который принимает один аргумент, вы можете использовать ключевое слово explicit, чтобы предотвратить неявное преобразование аргумента в объект вашего класса. Это может быть полезно, если вы хотите избежать ошибок, связанных с неожиданными неявными преобразованиями.

⚫️Вот простой пример использования ключевого слова explicit с конструктором:
class MyClass {
public:
explicit MyClass(int x) : m_x(x) {}
private:
int m_x;
};

int main() {
MyClass a = 5; // Ошибка: неявное преобразование запрещено
MyClass b(5); // ОК: явное преобразование
}


⚫️В этом примере конструктор класса MyClass объявлен как explicit, поэтому он не может использоваться для неявного преобразования значения int в объект класса MyClass. Попытка сделать это вызывает ошибку компиляции. Однако вы все еще можете использовать конструктор для явного преобразования значения int в объект класса MyClass, как показано в строке с объявлением переменной b.

#cpp #programming

@cppsobes
Please open Telegram to view this post
VIEW IN TELEGRAM
@cppsobes - Разбираем задачи с собеседований C++
Regular expressions library (since C++11)

Библиотека регулярных выражений предоставляет класс, представляющий регулярные выражения, которые являются своего рода мини-языком, используемым для выполнения сопоставления шаблонов в строках.

#include <iostream>
#include <iterator>
#include <regex>
#include <string>

int main()
{
std::string s = "Some people, when confronted with a problem, think "
"\"I know, I'll use regular expressions.\" "
"Now they have two problems.";

std::regex self_regex("REGULAR EXPRESSIONS",
std::regex_constants::ECMAScript | std::regex_constants::icase);
if (std::regex_search(s, self_regex))
std::cout << "Text contains the phrase 'regular expressions'\n";

std::regex word_regex("(\\w+)");
auto words_begin =
std::sregex_iterator(s.begin(), s.end(), word_regex);
auto words_end = std::sregex_iterator();

std::cout << "Found "
<< std::distance(words_begin, words_end)
<< " words\n";

const int N = 6;
std::cout << "Words longer than " << N << " characters:\n";
for (std::sregex_iterator i = words_begin; i != words_end; ++i)
{
std::smatch match = *i;
std::string match_str = match.str();
if (match_str.size() > N)
std::cout << " " << match_str << '\n';
}

std::regex long_word_regex("(\\w{7,})");
std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
std::cout << new_s << '\n';
}

https://en.cppreference.com/w/cpp/regex

#cpp #programming

@cppsobes
Что выведет код?
Anonymous Quiz
6%
111
49%
222
7%
123
38%
121
Cколько байт памяти займут данные этого типа?
Anonymous Quiz
20%
32
24%
54
23%
30
33%
52