Главная » Просмотр файлов » Волкова немного о её семинарах

Волкова немного о её семинарах (1119514), страница 4

Файл №1119514 Волкова немного о её семинарах (Волкова немного о её семинарах) 4 страницаВолкова немного о её семинарах (1119514) страница 42019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

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

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

Часто пакеты прикладных программ располагают базами данных для хранения данных и передачи их прикладным программам.

Принципы использования статических библиотек.

Статические библиотеки подключаются к программе в момент ее компоновки. Вспомним схему работы СП, рассмотренную на 1 лекции.

Динамически подключаемые библиотеки.

Динамические библиотеки (ДБ) в отличие от статических библиотек подключаются к программе не во время компиляции программы, а непосредственно в ходе её выполнения.

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

Преимущества таких библиотек:

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

  • различные программы, выполняемые в некоторой ОС, могут пользоваться кодом одной и той же библиотеки, содержащейся в ОС;

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

Широкий набор динамических библиотек поддерживается всеми современными ОС. Как правило, они содержат системные функции ОС и общедоступные функции программного интерфейса (API). Кроме того и сами программисты-пользователи могут создавать свои динамические библиотеки для использования при разработке прикладных программ.

Отличия ДБ в разных ОС: в UNIX ДБ загружаются автоматически после запуска приложения, а в Windows можно управлять процессом загрузки ДБ.

Стандартная библиотека С++.

В стандартную библиотеку включаются те средства (избранные), которые должны быть обеспечены в каждой реализации языка.

Критерии проектирования стандартной библиотеки.

  1. Общезначимость содержимого.

  2. Эффективность.

  3. Безопасность (использование библиотеки не должно провоцировать ошибки, а наоборот, снижать их вероятность).

  4. Завершенность (библиотека должна обеспечить достаточную функциональность, чтобы ни у кого не возникало желания что-то заменить или доопределить).

  5. Сочетаемость с базовыми типами данных.

  6. Должна служить фундаментом для создания других библиотек.

Стандартная библиотека С++ :

1) обеспечивает поддержку свойств языка (например, управление памятью (поддержка new и delete), предоставление информации о типах во время выполнения программы, поддержка обработки исключений…) - средства, которые используются при запуске программы,

2) предоставляет информацию о зависящих от реализации аспектах языка (например, максимальное значение float),

3) предоставляет программисту общеупотребительные математические и некоторые другие функции (например, sqrt(), генератор случайных чисел…),

4) предоставляет программисту некоторые нетривиальные и машиннозависимые средства, что позволяет писать переносимые программы (например, списки, функции сортировки, потоки ввода/вывода),

Средства стандартной библиотеки в соответствии с новым стилем определены в пространстве имен std (пространство имен - это некоторая объявляемая область, предназначенная для локализации имен идентификаторов во избежание конфликта имен) и представлены набором стандартных заголовков (<iostream>, <cstdio>, <list>…около 60), по которым компилятор находит требуемые файлы. Такие заголовки по-прежнему включаются в программу с помощью инструкции #include . Чтобы пространство имен std стало видимым, надо использовать следующую инструкцию:

using namespace std;

Эта инструкция делает все имена, определенные в std, доступными в текущем пространстве имен, и с ними можно работать напрямую, без необходимости каждый раз указывать имя пространства и оператор расширения области видимости (std::…).

С помощью ключевого слова namespace можно локализовать область видимости имен, объявленных в данном пространстве имен:

namespace имя {

// объявления

}

Namespace используется на файловом уровне, могут быть вложенные пространства имен, но, например, внутри блока или функции namespace употребляться не может. Безымянное пространство имен позволяет задавать идентификаторы, уникальные внутри одного файла.

Вероятно, от введения пространства имен больше всего выиграла стандартная библиотека С++.

Также поддерживается и старый стиль оформления заголовочных файлов. Так, стандартный заголовок, имя которого начинается с буквы с в пространстве имен std - <сХ> - эквивалентен заголовочному файлу стандартной библиотеки С <X.h> в глобальном пространстве имен.

Остановимся подробнее на части стандартной библиотеки С++ - STL.

Библиотека шаблонов STL.

STL (Standard Template Library) является частью стандарта C++ (разработчики стандарта С++ - Standard for the C++ programming language ISO/ISEE 14882, авг. 1998г. - приостановили его выпуск до разработки этой библиотеки). Компоненты этой библиотеки - шаблоны.

Ядро STL состоит из трех основных компонент:

  • контейнеры,

  • итераторы,

  • алгоритмы.

Контейнеры

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

Примером контейнера (с которым мы уже имели дело) является таблица идентификаторов. Массив, дерево, список также являются примерами контейнеров.

Стандартные контейнеры библиотеки STL

  • Vector < T > - динамический массив

  • List < T > - линейный список

  • Stack < T > - стек

  • Queue < T > - очередь

  • Deque < T > - двусторонняя очередь

  • Priority_queue < T > - очередь с приоритетами

  • Set < T > - множество

  • Bitset < N > - множество битов (массив из N бит)

  • Multiset < T > - набор элементов, возможно, одинаковых

  • Map < key, val > - ассоциативный список

  • Multimap < key, val > - ассоциативный список для хранения пар ключ/значение, где с каждым ключом может быть связано более одного значения.

Пример ассоциативного списка - список, хранящий фамилии людей и номера их телефонов. Ключом такого списка является фамилия, если она уникальна(!). Понятно, что у одного человека может быть несколько телефонов, поэтому multimap < key, val > здесь подойдет больше.

В каждом классе-контейнере определен набор функций для работы с этим контейнером, причем все контейнеры поддерживают стандартный набор базовых операций (функции, одинаково называющиеся, имеющие одинаковый профиль и семантику, их примерно 15-20). Например, функция push_back () помещает элемент в конец контейнера, функция size () выдает текущий размер контейнера. Этими функциями можно пользоваться одинаково независимо от того, в каком конкретно контейнере находятся элементы (можно менять контейнеры, не меняя тела функций, работающих с ними).

Операции, которые не могут быть эффективно реализованы для всех контейнеров, не включаются в набор общих операций. Например, обращение по индексу введено для vector , но не для list .

Каждый контейнер в своей public части содержит серию typedef, где введены стандартные имена типов. Среди них есть имена

value_type - тип элемента,

allocator_type - тип распределителя памяти,

size_type - тип, используемый для индексации,

iterator, const_iterator - итератор,

reverse_iterator, const_reverse_iterator - обратный итератор,

pointer, const_pointer - указатель на элемент,

reference, const_reference - ссылка на элемент.

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

Распределители памяти

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

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

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

Стандартный распределитель памяти, заданный стандартным шаблоном allocator из заголовочного файла <memory>, выделяет память при помощи оператора new() и по умолчанию используется всеми стандартными контейнерами.

template <class T> class allocator {

public:

typedef T* pointer;

typedef T& reference;

……

allocator() throw();

……

pointer allocate (size_type n); //память для n объектов T

void dealocate (pointer p, size_type n); // перераспределяет n объектов Т

void construct (pointer p, const T& val); //инициализирует *р значением val

void destroy (pointer p); // уничтожает *p

……

}

Алгоритмы

Алгоритмы STL (их всего 60) - реализуют некоторые распространенные операции с контейнерами, которые не реализуются функциями-членами каждого из контейнеров (например, просмотр, сортировка, поиск, удаление элементов…). Операции являются универсальными для любого из контейнеров и поэтому находятся вне этих контейнеров. Зная как устроены алгоритмы, можно писать свои собственные алгоритмы обработки, которые не будут зависеть от контейнера.

Каждый алгоритм выражается шаблоном функции или набором шаблонов функций. Все стандартные алгоритмы находятся в пространстве имен std, а их объявления - в заголовочном файле < algorithm > .

Можно выделить основные 3 группы алгоритмов :

1. Немодифицирующие алгоритмы, т.е. те, которые извлекают информацию из контейнера (о его устройстве, об элементах, которые там есть…) , но никак не модифицируют сам контейнер (ни элементы, ни порядок их расположения ).

Примеры :

Find () – находит первое вхождение элемента с заданным значением

Count () – количество вхождений элемента с заданным значением

For_each () – применяется операция к каждому элементу (не связано с изменением )

2. Модифицирующие алгоритмы. Это алгоритмы, которые каким-либо образом изменяют содержимое контейнера. Либо сами элементы меняются, либо их порядок, либо их количество и т.п.

Примеры :

Transform () – иногда её путают с for_each, т.к. и та и другая применяют некоторую операцию к каждому элементу. Но эта операция такова, что она меняет каждый элемент, таким образом - содержимое контейнера меняется.

Reverse () – переставляет элементы в последовательности.

Copy () – создает новый контейнер.

Характеристики

Список файлов семинаров

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6439
Авторов
на СтудИзбе
306
Средний доход
с одного платного файла
Обучение Подробнее