Dyzzet|
C++ Data Science Алгоритмы Темы · Блог · YouTube
Колонками
Постранично
13 апреля
Хаос в выражениях с инкрементом указателя

Навеяно «мемом»

Задача: записать значение x в нулевой элемент массива p и сместить указатель на следующий элемент.

Самый очевидный и чистый вариант:

p[0] = x;
++p;

Поскольку указатель на массив, используемый без квадратных скобок, означает адрес нулевого элемента, то есть p ≡ &p[0], его разыменование даёт сам нулевой элемент. Это означает, что *p ≡ p[0].

*p = x;
++p;

Эти две операции можно объединить. Но мы должны использовать пост-инкремент (указатель инкрементируется, оператор возвращает старый указатель).

*p++ = x;

Читать далее →
17 января
Оптимизация цикла

Скажем, нам нужно сгенерировать \(n\) объектов двух типов.

def f(n):
    zeros = 0
    ones = 0
    for i in range(n):
        value = random.randint(0, 1)
        if value == 0:
            zeros += 1
        else:
            ones += 1
    return zeros, ones

При \(n = 144 \cdot 10^6\) такая программа выполняется за 2,17 с.

1. Наивная версия на C++ выполняется за 1,47 с.

size_t zeros{}, ones{};
for (size_t i{}; i < n; ++i)
{
    ++(distribution(range) % 2 == 0 ? zeros : ones);
}

Читать далее →
16 января
Обзоры книг по C++. Профессиональная литература. Часть I

Андрей Александреску. Современное проектирование на C++. Обобщённое программирование и прикладные шаблоны проектирования

336 страниц. Вильямс, 2002

Andrei Alexandrescu. Modern C++ Design: Generic Programming and Design Patterns. Addison-Wesley, 2001

Андрей Александреску — соавтор языка D.

Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес. Приёмы объектно-ориентированного проектирования (оригинал 1995 года)

Книгу открывают предисловия Скотта Мейерса и Джона Влиссидеса (соавтора знаменитой книги о шаблонах проектирования от «банды четырёх»).

Материал, безусловно, сложный. Это то, что называют шаблонной магией. Автор показывает устройство реальной библиотеки Loki. Хотя всё подробно описывается, читатель должен уже быть хорошо подготовлен.

К сожалению, в русском переводе есть опечатки в коде и ошибки в терминах: copy constructor, то есть конструктор копирования, в одном месте перевели непонятно как; некоторые термины на момент перевода ещё не устоялись в русском языке, так, frameworks перевели как специальные среды разработки (но в скобках даётся оригинал, так что можно понять).

Читать далее →
16 января
Асимптотики

27 декабря 2021
Обзоры книг по C++. Структуры данных, алгоритмы, решение задач

Книги по классическим алгоритмам и структурам данных и сборники задач с решениями. Сборники задач по самому языку C++ будут в части с обзорами профессиональной литературы.

Мариус Бансила. Решение задач на современном C++

302 страницы. ДМК, 2019

Marius Bancila. The Modern C++ Challenge. Packt, 2018

Задачи и решения на C++17.

Вот темы и некоторые задачи:

  • математические задачи (код Грея, преобразование чисел в римскую запись, вычисление \(\pi\), проверка ISBN...),
  • особенности языка (перечисление адресов в IPv4, двумерный массив с базовыми операциями, функция min() с переменным числом аргументов, литералы разных температурных шкал...),
  • строки и регулярные выражения, потоки данных и файловые системы (треугольник Паскаля, удаление пустых строк из файла, удаление файлов старше заданной даты...),
  • дата и время (время выполнения программы, число дней между датами, календарь на месяц...),
  • алгоритмы и структуры данных (очередь с приоритетом, циклический буфер, двойной буфер, самый часто встречающийся элемент в диапазоне, текстовая гистограмма, фильтрация списка телефонных номеров, преобразование списка телефонных номеров, генерация всех перестановок символов в строке, средний рейтинг фильмов, алгоритм объединения в пары, алгоритм «сшивания», алгоритм выбора, алгоритм сортировки, кратчайший путь между узлами, программа Weasel, игра «Жизнь»),
  • конкурентность, шаблоны проектирования (проверка пароля, генерация паролей...),
  • сериализация данных (XML, JSON, создание PDF из коллекции изображений),
  • архивы, изображения и базы данных (поиск в ZIP-архиве, создание PNG-файла, работа с SQLite),
  • криптография (шифры, Base64, хеш-сумма файла...), сети и службы.

Читать далее →
8
7 6 5 4 3 2 1
© MMXI—MMXXII. RSS. Поддержать сайт
Светлая тема / тёмная тема