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

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

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

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

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

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

    1 ... 248 249 250 251 252 253 254 255 256 ... 337
    Перейти на страницу:
    а в стандарте указаны только минимальные требования. Однако можно легко написать программу, находящую ответы на эти вопросы.

    cout << "количество байтов в типе int: " << sizeof(int) << 'n';

    cout << "наибольшее число типа int: " << INT_MAX << endl;

    cout << "наименьшее число типа int: " << numeric_limits<int>::min()

         << 'n';

    if (numeric_limits<char>::is_signed)

      cout << "тип char имеет знак n";

    else

      cout << "тип char не имеет знакаn";

    cout << "char с минимальным значением: "

         << numeric_limits<char>::min() <<'n';

    cout << "минимальное значение типа char: "

         << int(numeric_limits<char>::min()) << 'n';

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

    Эти пределы также могут быть полезными для выявления переполнения.

    24.3. Массивы

    Массив (array) — это последовательность, в которой доступ к каждому элементу осуществляется с помощью его индекса (позиции). Синонимом этого понятия является вектор (vector). В этом разделе мы уделим внимание многомерным массивам, элементами которых являются тоже массивы. Обычно многомерный массив называют матрицей (matrix). Разнообразие синонимов свидетельствует о популярности и полезности этого общего понятия. Стандартные классы vector (см. раздел Б.4), array (см. раздел 20.9), а также встроенный массив (см. раздел A.8.2) являются одномерными. А что если нам нужен двумерный массив (например, матрица)? А если нам нужны семь измерений? Проиллюстрировать одно- и двухмерные массивы можно так.

    Массивы имеют фундаментальное значение в большинстве вычислений, связанных с так называемым “перемалыванием чисел” (“number crunching”). Наиболее интересные научные, технические, статистические и финансовые вычисления тесно связаны с массивами.

     

     Часто говорят, что массив состоит из строки столбцов.

    Столбец — это последовательность элементов, имеющих одинаковые первые координаты (х-координаты). Строка — это множество элементов, имеющих одинаковые вторые координаты (y-координаты).

    24.4. Многомерные массивы в стиле языка С

    В качестве многомерного массива можно использовать встроенный массив в языке С++ . В этом случае многомерный массив интерпретируется как массив массивов, т.е. массив, элементами которого являются массивы. Рассмотрим пример.

    int ai[4];        // 1-мерный массив

    double ad[3][4];  // 2-мерный массив

    char ac[3][4][5]; // 3-мерный массив

    ai[1] = 7;

    ad[2][3] = 7.2;

    ac[2][3][4] = 'c';

     

     Этот подход наследует все преимущества и недостатки одномерного массива.

    • Преимущества

     • Непосредственное отображение с помощью аппаратного обеспечения.

     • Эффективные низкоуровневые операции.

     • Непосредственная языковая поддержка.

    • Проблемы

     • Многомерные массивы в стиле языка являются массивами массивов(см. ниже).

     • Фиксированные размеры (например, фиксированные на этапе компиляции). Если хотите определять размер массива на этапе выполнения программы, то должны использовать свободную память.

     • Массивы невозможно передать аккуратно. Массив превращается в указатель на свой первый элемент при малейшей возможности.

     • Нет проверки диапазона. Как обычно, массив не знает своего размера.

     • Нет операций над массивами, даже присваивания (копирования).

    Встроенные массивы широко используются в числовых расчетах. Они также являются основным источником ошибок и сложностей. Создание и отладка таких программ у большинства людей вызывают головную боль. Если вы вынуждены использовать встроенные массивы, почитайте учебники (например, The C++ Programming Language, Appendix C, p. 836–840). К сожалению, язык C++ унаследовал многомерные массивы от языка C, поэтому они до сих пор используются во многих программах.

     

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

    void f1(int a[3][5]);     // имеет смысл только в матрице [3][5]

    void f2(int [ ][5], int dim1);  // первая размерность может быть

                                    // переменной

    void f3(int [5 ][ ], int dim2); // ошибка: вторая размерность

                                    // не может быть переменной

    void f4(int[ ][ ], int dim1, int dim2); // ошибка (совсем

                                            // не работает)

    void f5(int* m, int dim1, int dim2) // странно, но работает

    {

      for (int i=0; i<dim1; ++i)

      for (int j = 0; j<dim2; ++j) m[i*dim2+j] = 0;

    }

    Здесь мы передаем массив m как указатель int*, даже если он является двумерным. Поскольку вторая переменная должна быть переменной (параметром), у нас нет никакой возможности сообщить компилятору, что массив m является массивом (dim1, dim2), поэтому мы просто передаем указатель на первую его ячейку. Выражение m[i*dim2+j] на самом деле означает m[i,j], но, поскольку компилятор не знает, что переменная m — это двумерный массив, мы должны сначала вычислить позицию элемента m[i,j] в памяти.

    Этот способ слишком сложен, примитивен и уязвим для ошибок. Он также слишком медленный, поскольку явное вычисление позиции элемента усложняет оптимизацию. Вместо того чтобы учить вас, как справиться с этой ситуацией, мы сконцентрируемся на библиотеке С++, которая вообще устраняет проблемы, связанные с встроенными массивами.

    24.5. Библиотека Matrix

     

     Каково основное предназначение массива (матрицы) в численных расчетах?

    • “Мой код должен выглядеть очень похожим на описание массивов, изложенное в большинстве учебников по математике”.

     • Это относится также к векторам, матрицам и тензорам.

    • Проверка на этапах компиляции и выполнения программы.

     • Массивы любой размерности.

     • Массивы с произвольным количеством элементов в любой размерности.

     • Массивы являются полноценными переменными/объектами.

     • Их можно передавать куда угодно.

    • Обычные операции над массивами.

     • Индексирование: ().

     • Срезка: [].

     • Присваивание: =.

     • Операции пересчета (+=, –=, *=, %= и т.д.).

     • Встроенные векторные операции (например, res[i] = a[i]*c+b[2]).

     • Скалярное произведение (res = сумма элементов a[i]*b[i]; известна также как inner_product).

    • По существу, обеспечивает автоматическое преобразование традиционного исчисления массивов/векторов в текст программы, который в противном случае вы должны были бы написать сами (и добиться, чтобы они были не менее эффективными).

    • Массивы при необходимости можно увеличивать (при их реализации не используются “магические” числа).

    Библиотека

    1 ... 248 249 250 251 252 253 254 255 256 ... 337
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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