LoveRead.info » Книги » Разная литература » Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп

Книгу Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

287 0 18:03, 26-08-2023
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
26 август 2023

Книга Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп читать онлайн бесплатно без регистрации

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

    1 ... 321 322 323 324 325 326 327 328 329 ... 337
    Перейти на страницу:
    и выходные последовательности предполагаются упорядоченными.

    Б.5.6. Кучи

     Куча — это структура данных, в вершине которой находится элемент с наибольшим значением. Алгоритмы над кучами позволяют программистам работать с последовательностями произвольного доступа.

    Куча позволяет быстро добавлять элементы и обеспечивает быстрый доступ к элементу с наибольшим значением. В основном кучи используются при реализации очередей с приоритетами.

    Б.5.7. Перестановки

    Перестановки используются для генерирования комбинаций элементов последовательности. Например, перестановками последовательности abc являются последовательности abc, acb, bac, bca, cab и cba.

    Если последовательность [b:e] уже содержит последнюю перестановку (в данном примере это перестановка cba), то алгоритм next_permutation возвращает значение x, равное false; в таком случае алгоритм создает первую перестановку (в данном примере это перестановка abc). Если последовательность [b:e] уже содержит первую перестановку (в данном примере это перестановка abc), то алгоритм prev_permutation возвращает значение x, равное false; в таком случае алгоритм создает последнюю перестановку (в данном примере это перестановка cba).

    Б.5.8. Функции min и max

    Сравнение значений полезно во многих случаях.

    Б.6. Утилиты библиотеки STL

    В стандартной библиотеке есть несколько инструментов для облегчения использования стандартных библиотечных алгоритмов.

    Б.6.1. Вставки

    Запись результатов в контейнер с помощью итератора подразумевает, что элементы, на которые указывает итератор, можно перезаписать. Это открывает возможность для переполнения и последующего повреждения памяти. Рассмотрим следующий пример:

    void f(vector<int>& vi)

    {

      fill_n(vi.begin(),200,7); // присваиваем 7 элементам

                                  // vi[0]..[199]

    }

    Если вектор vi содержит меньше 200 элементов, то возникает опасность. В заголовке <iterator> стандартная библиотека предусматривает три итератора, позволяющих решить эту проблему с помощью добавления (вставки) элементов в контейнер, а не перезаписи его старых элементов. Для генерирования этих трех итераторов вставки используются три функции.

    Для правильной работы алгоритма inserter(c,p) необходимо, чтобы итератор p был корректным итератором для контейнера c. Естественно, каждый раз при записи очередного элемента с помощью итератора вставки контейнер увеличивается на один элемент. При записи алгоритм вставки добавляет новый элемент в последовательность с помощью функции push_back(x), c.push_front() или insert(), а не перезаписывает существующий элемент. Рассмотрим следующий пример:

    void g(vector<int>& vi)

    {

      fill_n(back_inserter(vi),200,7); // добавляет 200 семерок

                                       // в конец vi

    }

    Б.6.2. Объекты-функции

    Многие стандартные алгоритмы принимают в качестве аргументов объекты-функции (или функции), чтобы уточнить способ решения задачи. Обычно эти функции используются в качестве критериев сравнения, предикатов (функций, возвращающих значения типа bool) и арифметических операций. Несколько самых общих объектов-функций описано в заголовке <functional> стандартной библиотеки.

    Рассмотрим следующий пример:

    vector<int> v;

    // ...

    sort(v.begin(),v.end(),greater<int>()); // сортировка v в убывающем

                                            // порядке

    Обратите внимание на то, что предикаты logical_and и logical_or всегда вычисляют оба свои аргумента (в то время как операторы && и || — нет).

    Б.6.3. Класс pair

    В заголовке <utility> стандартная библиотека содержит несколько вспомогательных компонентов, включая класс pair.

    template <class T1,class T2>

      struct pair {

        typedef T1 first_type;

        typedef T2 second_type;

        T1 first;

        T2 second;

        pair();      // конструктор по умолчанию

        pair(const T1& x,const T2& y);

                     // копирующие операции:

        template<class U,class V> pair(const pair<U,V>& p);

    };

    template <class T1, class T2>

      pair<T1,T2> make_pair(T1 x, T2 y) { return pair<T1,T2>(x,y); }

    Функция make_pair() упрощает использование пар. Например, рассмотрим схему функции, возвращающей значение и индикатор ошибки.

    pair<double,error_indicator> my_fct(double d)

    {

      errno = 0; // очищаем индикатор ошибок в стиле языка C

                 // выполняем много вычислений, связанных с переменной d,

                 // и вычисляем x

      error_indicator ee = errno;

      errno = 0; // очищаем индикатор ошибок в стиле языка C

      return make_pair(x,ee);

    }

    Этот пример является полезной идиомой. Его можно использовать следующим образом:

    pair<int,error_indicator> res = my_fct(123.456);

    if (res.second==0) {

      // используем res.first

    }

    else {

      // Ой: ошибка

    }

    Б.7. Потоки ввода-вывода

    Библиотека потоков ввода-вывода содержит средства форматированного и неформатированного буферизованного ввода-вывода текста и числовых значений.

    Определения потоков ввода-вывода находятся в заголовках <istream>, <ostream> и т.п. (см. раздел Б.1.1).

    Объект класса ostream преобразовывает объекты, имеющие тип, в поток символов (байтов).

    Объект класса istream преобразовывает поток символов (байтов) в объекты, имеющие тип.

    Объект класса iostream — это поток, который может действовать и как объект класса istream, и как объект класса ostream. Буфера, изображенные на диаграмме, являются потоковыми буферами (streambuf). Если читателям потребуется перейти от потоков класса iostream к новым видам устройств, файлов или памяти, они смогут найти их описание в профессиональных учебниках.

    Существуют три стандартных потока.

    Б.7.1. Иерархия потоков ввода-вывода

    Поток istream можно связать с устройством ввода (например, клавиатурой), файлом или объектом класса string. Аналогично поток ostream можно связать с устройством вывода (например, текстовым окном), файлом или объектом класса string. Потоки ввода-вывода образуют иерархию классов.

    Поток можно открыть либо с помощью конструктора, либо вызова функции open().

    Для файловых потоков имя файлов представляет собой строку в стиле языка С.

    Открыть файл можно в одном из режимов, приведенных

    1 ... 321 322 323 324 325 326 327 328 329 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки