Алгоритм merge
Объединяет две отсортированные последовательности, ограниченные диапазонами
Шаблон:
➡️ @cpp_geek
Объединяет две отсортированные последовательности, ограниченные диапазонами
[first1,last1)
и [first2,last2)
, в единую отсортированную последовательность, начинающуюся с позиции result.Шаблон:
merge (initer1 beg1, initer1 end1,
initer2 beg2, initer2 end2,
outiter res).
➡️ @cpp_geek
Быстрая сортировка
Отсортируйте заданный массив с помощью быстрой сортировки.
Формат входных данных:
Первая строка входных данных содержит одно натуральное число
Формат выходных данных:
Выведите элементы массива в порядке неубывания.
➡️ @cpp_geek
Отсортируйте заданный массив с помощью быстрой сортировки.
Формат входных данных:
Первая строка входных данных содержит одно натуральное число
nn (1 ≤ n ≤ 10^5)
– количество элементов в массиве. В следующей строке находятся элементы массива – n
целых чисел, не превосходящих по абсолютной величине 10^9.Формат выходных данных:
Выведите элементы массива в порядке неубывания.
➡️ @cpp_geek
Что лучше const или define?
Ответ:
У
Определенно, лучше использовать const, а не define.
➡️ @cpp_geek
Ответ:
define
- это директива препроцессора, которая не учитывает ни типов, ни областей видимости. Препроцессор вставляет значение везде, где оно используется и создается множество копий 3.14159265359 в объектном коде, константа никогда не порождает больше одной копии этого значения. define трудно отлаживать, потому что у него нет имени, только магическое число, нельзя взять адрес или создать ссылку на это значение.У
const
есть тип, область видимости, можно взять адрес, создать константную ссылку на эту переменную.Определенно, лучше использовать const, а не define.
➡️ @cpp_geek
assert()
Аpгyмент
Когда expression ложно (ноль), assert вызывает abort, предварительно выведя сообщение, показывающие, какая и где произошла ошибка:
assertion failed: expression, file filename, line lineno
➡️ @cpp_geek
assert()
- макроопределение для вывода отладочных диагностических сообщений. Используется для включения в программу диагностических операторов и принимает один аргумент (int expression).Аpгyмент
expression
должен быть выражением, которое принимает значение истина (не ноль), если программа работает так, как вы предполагаете.Когда expression ложно (ноль), assert вызывает abort, предварительно выведя сообщение, показывающие, какая и где произошла ошибка:
assertion failed: expression, file filename, line lineno
➡️ @cpp_geek
Ключевое слово typedef
Это ключевое слово, которое создает псевдоним для существующего типа данных.
По соглашению имена
Это помогает указать, что идентификатор представляет собой тип, а не переменную или функцию, а также помогает предотвратить конфликты имен с другими типами идентификаторов.
➡️ @cpp_geek
Это ключевое слово, которое создает псевдоним для существующего типа данных.
По соглашению имена
typedef
объявляются с использованием суффикса "_t
". Это помогает указать, что идентификатор представляет собой тип, а не переменную или функцию, а также помогает предотвратить конфликты имен с другими типами идентификаторов.
➡️ @cpp_geek
Что выведет код сверху?
Ответ: “Constructor called” 5 раз и затем “Destructor called” 5 раз.
В приведенной выше программе мы сначала инициировали переменные с пятью указателями, используя ключевое слово new, следовательно, после этого будет вызван конструктор
➡️ @cpp_geek
Ответ: “Constructor called” 5 раз и затем “Destructor called” 5 раз.
В приведенной выше программе мы сначала инициировали переменные с пятью указателями, используя ключевое слово new, следовательно, после этого будет вызван конструктор
fives time
, поскольку мы используем delete[]
(используется для удаления нескольких объектов) для удаления переменных, следовательно, все созданные пять объектов будут уничтожены и, следовательно, будет вызван деструктор five times
.➡️ @cpp_geek
В чем различия между dynamic_cast и reinterpret_cast?
Правильный ответ может звучать так:
Динамическое приведение — это безопасное приведение по иерархии наследования, в том числе и для виртуального наследования. Проводит преобразование типа, предварительно убедившись (с помощью RTTI), что объект expression_from в действительности является объектом типа type_to. Если нет: для указателей возвращает NULL.
При reinterpret_cast результат не гарантирован, проверки не осуществляются.
Ограничения на expression_from: порядковый тип (логический, символьный, целый, перечисляемый), указатель, ссылка.
Ограничения на type_to: для порядкового типа или указателя — порядковый тип или указатель. Для ссылки — ссылка.
➡️ @cpp_geek
Правильный ответ может звучать так:
Динамическое приведение — это безопасное приведение по иерархии наследования, в том числе и для виртуального наследования. Проводит преобразование типа, предварительно убедившись (с помощью RTTI), что объект expression_from в действительности является объектом типа type_to. Если нет: для указателей возвращает NULL.
При reinterpret_cast результат не гарантирован, проверки не осуществляются.
Ограничения на expression_from: порядковый тип (логический, символьный, целый, перечисляемый), указатель, ссылка.
Ограничения на type_to: для порядкового типа или указателя — порядковый тип или указатель. Для ссылки — ссылка.
➡️ @cpp_geek
Что такое хеш-функция? Объясните на примере
Хеш-функция - это функция, которая принимает на вход некоторые данные и возвращает фиксированный размер выходных данных, называемый хешем. Такие функции широко используются в C++ для решения задач с поиском и индексированием данных. Они позволяют быстро находить элементы в массивах или хранилищах данных.
Рассмотрим применение на примере кода выше:
Мы создаем объект хеш-функции для строки и используем его для вычисления хеша для строки "
➡️ @cpp_geek
Хеш-функция - это функция, которая принимает на вход некоторые данные и возвращает фиксированный размер выходных данных, называемый хешем. Такие функции широко используются в C++ для решения задач с поиском и индексированием данных. Они позволяют быстро находить элементы в массивах или хранилищах данных.
Рассмотрим применение на примере кода выше:
Мы создаем объект хеш-функции для строки и используем его для вычисления хеша для строки "
Hello, world!
". Результатом выполнения программы будет вывод на экран хеш-значения для этой строки.➡️ @cpp_geek
Удаление всех вхождений элемента в массив
В этом методе сдвиньте нецелевой элемент в левую сторону.
⚫️ Проверьте, является ли текущий элемент целевым элементом или нет.
⚫️ Если это целевой элемент, увеличьте переменную cnt.
⚫️ После этого элемента все нецелевые элементы сдвинутся влево с промежутком (n-cnt).
Временная сложность:
Сложность пространства:
На картинке приведена программа на C ++ для удаления всех вхождений элемента из массива с использованием оптимизированного подхода.
➡️ @cpp_geek
В этом методе сдвиньте нецелевой элемент в левую сторону.
Временная сложность:
O(n)
Сложность пространства:
O(1)
На картинке приведена программа на C ++ для удаления всех вхождений элемента из массива с использованием оптимизированного подхода.
➡️ @cpp_geek
Please open Telegram to view this post
VIEW IN TELEGRAM
Получить текущее время и дату в C++
Начиная с C++11, стандартным решением для получения текущего времени и даты в C++ является использование библиотеки chrono.
Мы можем получить текущее время с помощью
Затем преобразовать
➡️ @cpp_geek
Начиная с C++11, стандартным решением для получения текущего времени и даты в C++ является использование библиотеки chrono.
Мы можем получить текущее время с помощью
std::chrono::system_clock::now() от hrono.h
хедера и преобразовать его в std::time_t
тип (время от эпохи).Затем преобразовать
std::time_t
на местное календарное время std::ctime
в Www Mmm dd hh:mm:ss yyyy формате, как показано на картинке.➡️ @cpp_geek