Dyzzet|
C++ Data Science Алгоритмы Темы · Блог · YouTube · Telegram
Колонками
Постранично
Обзоры книг по C++. Что выбрать? (Обновляется)

Б. Страуструп. Язык программирования C++. Краткий курс

Б. Страуструп. Дизайн и эволюция C++

С. Липпман, Ж. Лажойе, Б. Му. Язык программирования C++. Базовый курс

Сиддхартха Рао. Освой самостоятельно C++ по одному часу в день

Если вы предпочитаете первоисточник, то вам подойдёт книга Бьерна Страуструпа «Язык программирования C++. Краткий курс» (2019), самая человечная из его книг. Если вы уже хорошо изучили язык, вам может понравиться книга «Дизайн и эволюция C++» (оригинал 1994 года), хотя она и не несёт практической пользы.

Авторы Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му написали хорошую книгу «Язык программирования C++. Базовый курс» (2014), которая не только переиздаётся, но и обновляется. С. Липпман и Б. Му принимали участие в стандартизации языка.

На удивление хорошей оказалась книга Сиддхартхи Рао «Освой самостоятельно C++ по одному часу в день» (2017).

Книга Майкла Доусона «Изучаем C++ через программирование игр» (2016) может послужить стимулом для начинающих разработчиков.

Читать далее →
17 ноября 2024
Обзоры книг по C++. Советы и задачи по языку

Курт Гантерот. Оптимизация программ на C++. Проверенные методы для повышения производительности

400 страниц. Альфа-книга, 2017

Kurt Guntheroth. Optimized C++. Proven Techniques for Heightened Performance. O’Reilly, 2016

«Приветствую вас! Меня зовут Курт, и я кодоголик».

Подход обстоятельный. В начале книги описывается закон Амдала — улучшение времени выполнения \(S_T\):

\(S_T = \dfrac{1}{(1-P)+\frac{P}{S_p}}\),

где \(P\) — доля оптимизированного общего времени выполнения, \(S_p\) — показатель улучшения в оптимизированной части \(P\). Например, если некоторая функция выполнялась 80 процентов всего времени работы программы, а улучшенная её версия стала работать на 30 процентов быстрее, иначе говоря, \(P=0{,}8\), \(S_p=1{,}3\), то \(S_T\approx 1{,}22\).

Глава «Оптимизация, влияющая на поведение компьютера» — очерк того, с какими абстракциями аппаратного и программного обеспечения приходится иметь дело. Большая часть тем — это последовательное улучшение некоторого базового примера.

Читать далее →
4 октября 2024
Обзоры книг по C++. Boost

Boost — огромный набор библиотек.

Онлайн-примеры кода из книги, которые можно изменять и запускать

Антон Полухин. Разработка приложений на C++ с использованием Boost

346 страниц. ДМК Пресс, 2020

Antony Polukhin. Boost C++ Application Development Cookbook. Packt, 2013

Антон Полухин — автор нескольких библиотек Boost, поддерживает ряд старых библиотек и сейчас представляет Россию в международном комитете по стандартизации C++.

Оглавление:

  1. Приступаем к написанию приложения
  2. Управление ресурсами
  3. Преобразование и приведение
  4. Уловки времени компиляции
  5. Многопоточность
  6. Манипулирование задачами
  7. Манипулирование строками
  8. Метапрограммирование
  9. Контейнеры
  10. Сбор информации о платформе и компиляторе
  11. Работа с системой
  12. Касаясь верхушки айсберга

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

$ ./our_program.exe --apples=10 --oranges=20
Fruits count: 30

Какие-то вещи уже устарели, потому что стали частью стандарта, например, Boost.Any, Boost.Variant, Boost.Optional, Boost.Tuple, Boost.Bind, Boost.Move (семантика перемещения до C++11), Boost.SmartPtr, Boost.Function. Какие-то вещи просто любопытны. Как, например, имитация finally из языка Java. Полезных вещей в книге можно подсмотреть много, скажем, синтаксический анализ (parsing) сложного ввода с помощью Boost.Spirit. Там используется расширенная форма Бэкуса — Наура (РБНФ, Extended Backus–Naur Form; EBNF).

const bool success = boost::spirit::qi::parse(first, end,
    u4_[y] >> char_('-') >> u2_[m] >> char_('-') >> u2_[d]
);

Книга рассказывает о многих вещах, но довольно поверхностно. Но как ознакомительный обзор вполне годится.

Дэвид Р. Мюссер, Жилмер Дж. Дердж, Атул Сейни. C++ и STL: справочное руководство (2010, оригинал 2001)

Джереми Сик, Лай-Кван Ли, Эндрю Ламсдэйн. C++ Boost Graph Library

304 страницы. Питер, 2006

Jeremy G. Siek, Lie-Quan Lee, Andrew Lumsdaine. The Boost Graph Library. Addison-Wesley, 2002

Книга по довольно сложной части библиотеки Boost — графовой библиотеке.

Часть I — основные алгоритмы, поиск кратчайшего пути, минимальное о́стовное дерево, компоненты связности, максимальный поток, неявные графы («обход конём»), а также взаимодействие с другими графовыми библиотеками и производительность. Часть II — справочник.

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

Предисловия Александра Степанова — отдельный жанр. В этом своём четырёхстраничном эссе Александр Александрович успевает снова кратко изложить идеи обобщённого программирования, упомянуть что-нибудь сложное (multi-sorted algebras — многосортные алгебры), написать код на Лиспе, похвалить C++ за выразительность и тут же поругать:

«В шаблонах отсутствует разделение между интерфейсами и реализацией. Например, недавно я пытался откомпилировать пример STL-программы из десяти строк, используя один из наиболее популярных компиляторов C++... Я был в шоке, увидев несколько страниц неразборчивых сообщений об ошибках».

За прошедшие два с лишним десятка лет в языке появились концепции, которых для ещё большей выразительности раньше не хватало. Тогда использовались собственные инструменты библиотеки Boost вместо полноценных концепций. Иначе, как показали авторы, сообщения даже из-за каких-то небольших ошибок были бы абсолютно непонятными, даже сбивающими с толку.

Содержание первой части:

  1. Введение
  2. Обобщённое программирование в C++
  3. Изучаем BGL
  4. Основные алгоритмы на графах
  5. Задачи нахождения кратчайших путей
  6. Задача минимального остовного дерева
  7. Компоненты связности
  8. Максимальный поток
  9. Неявные графы: обход конём
  10. Взаимодействие с другими графовыми библиотеками
  11. Руководство по производительности

Вторая часть (а это половина книги) — справочное руководство.

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

Поизучать, как устроена библиотека BGL, стоит уже хотя бы ради того, чтобы посмотреть, как проектируют библиотеки в рамках парадигмы обобщённого программирования. Там пересекаются многие темы, причём иногда с неожиданной стороны: специализация шаблонов, поиск Кёнига, типажи (traits) и т. д.

В качестве примера строится граф на основе файла с данными об актёрах (для разбора используется библиотека Boost Tokenizer Library), нужно найти кратчайший путь от заданного актёра до Кевина Бэкона. Такую задачу решают в Университете Вирджинии.

20 августа 2023
Книга Игоря Иванова «Объясняя науку»

Игорь Владимирович Иванов. Объясняя науку: руководство для авторов научно-популярных текстов

242 страницы. Альпина нон-фикшн, 2021

Небольшая интересная книга с необычной обложкой.

Содержание:

  • Для кого эта книга
  • Предмет обсуждения
  • Лестница уровней понимания
  • Насколько глубоко надо быть в теме
  • Сферический читатель в вакууме
  • Структура научно-популярной новости
  • Сенсации на ровном месте
  • Технология объяснения: суть
  • Технология объяснения: стиль и приёмы
  • Упрощения и аналогии
  • Ссылки
  • Постпродукционное сопровождение
  • Примеры

Возможно, самая большая проблема книги — то, что название не совпадает с содержанием. Вернее было бы сказать «Объясняя новости науки». Нас трижды предупреждали ещё в аннотации, но мы не слушали.

Читать далее →
Конвертер типа float с визуализацией


Примеры: 3.5; 0.1; 0; 3.4028234663852886e38; Infinity; NaN

(−1) · · 2 − 127−126 = 2 =≈  · 10

|{x : x ∈ float ∧ 2 x 2}| = 8 388 608
|{x : x ∈ float ∧ 0 ⩽ x < 2−126}| = 8 388 608
|{x : x ∈ float ∧ −2−126 < x ⩽ 0}| = 8 388 608
|{x : x ∈ float ∧ 2 ⩽ x < 2}| = |{x : x ∈ float ∧ −2 ⩽ x < −2}| =
18 июня 2023
Задача о дождевой воде. Решаем с помощью диапазонов

Дан ряд целых чисел \(a_i \geqslant 0,\) \(i=\overline{1,n}\). Числа символизируют высоту стен. Сверху идёт дождь, и вода скапливается в ячейках между стенами. В каждом столбце скапливается \(w_i\) воды. Нужно найти количество ячеек с водой: \[W=\sum_{i=1}^{n} w_i.\]

Пример: \[a=(2, 4, 1, 3, 2, 5, 2, 1, 3, 1).\]

⬛⬛⬛⬛⬛⬜⬛⬛⬛⬛
⬛⬜🟦🟦🟦⬜⬛⬛⬛⬛
⬛⬜🟦⬜🟦⬜🟦🟦⬜⬛
⬜⬜🟦⬜⬜⬜⬜🟦⬜⬛
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜

В столбцах скопилось воды \(w=(0,0,3,1,2,0,1,2,0,0),\) в сумме \(W = 9.\)

Читать далее →
12 марта 2023
Полиморфная кухня — 6. Умные указатели

В C++11 появились три вида умных (интеллектуальных) указателей: std::unique_ptr, std::shared_ptr и std::weak_ptr. Они избавляют от заботы освобождать память и другие ресурсы (если с ними правильно обращаться).

struct Base
{
    virtual void print() const noexcept
    {
        std::cout << "Base (const)" << std::endl;
    }
 
    virtual void print() noexcept
    {
        std::cout << "Base" << std::endl;
    }
 
    virtual ~Base() = default;
};

Читать далее →
4 марта 2023
День дельфийского сурка

Уникальный в каком-то смысле труд. Шесть книг по программированию. Четыре из них — по языкам Pascal и Delphi, а две другие — по языку Python. И хотя тема не C++, мимо названия «Полезное программирование» было трудно пройти, да и сам автор время от времени высказывается о C++.

ЭБС «Лань»

«Лабиринт»: Комлев

Николай Юрьевич Комлев. Полезное программирование

256 страниц. СОЛОН-пресс, 2016

Аннотация обещает сделать из читателя большого профессионала.

«Книга для тех, кто умеет программировать и уже готов этим зарабатывать.

Курс молодого, но профессионального программиста. Практические советы.

Что пригодится вам из пройденного и сданного. Что вы будете программировать сначала, а что позже, когда наберётесь опыта. К чему ещё можно применить ваш программистский талант, чтобы руководство одобрило и поощрило. Кратко, доступно, убедительно».

Читать далее →
15 февраля 2023
Вымышленные особенности указателя this

В Рунете полно сайтов о программировании, в основном там много статей для новичков. Такие сайты могут выглядеть модно, но работа авторов и редакторов (если они вообще есть) часто недотягивает до приличного уровня.

Интересные особенности указателя this

Небольшой, но показательный пример. Автор заявляет, что «this является const указателем».

class Foo {
private:
    int x;
public:
    Foo(int x = 0) {  this->x = x; }
    void change(Foo *foo) { this = foo; }
    void print() { cout << x << endl; }
};

И никого не смутило, что компилятор прямо говорит о причине:

«Если мы запустим (скомпилируем. — DZ) код, то получим ошибку компиляции в методе change (lvalue required as left operand of assignment)».

Тип указателя this — либо Foo*, либо const Foo*. Он не может быть Foo* const или const Foo* const. А присвоить ему ничего нельзя потому, что он не является левосторонним значением (lvalue); по-простому — не может стоять слева от знака присваивания.

Читайте хорошие книги и сайты.

9
8 7 6 5 4 3 2 1
© MMXI—MMXXV. RSS
 Boosty
Светлая тема / тёмная тема