Краткие ответы по теории (1115075), страница 5
Текст из файла (страница 5)
Сочетаемость с базовыми типами данных6. Возможность служить фундаментом для других библиотек44. Стандартная библиотека С++.Обеспечивает:1. поддержку свойств языка- управление памятью – new/delete.- предоставление информации о типах во время выполнения программы.- поддержка обратных исключений – те библиотечные средства, которыеиспользуются при запуске программы.2.
предоставление информации о зависящих от реализации аспектах языка.3. предоставление общеупотребительных функций.4. предоставление некоторых нетривиальных и машинно-зависимых средств(например, ввод/вывод, сортировка при работе со списком)Имена локализованы в пространстве имён std – т.е.
можно использовать эти имена, иэто не будет приводить к конфликту.При записи <cstdio> буква “c” обозначает, что файл подключается именно изстандартной библиотеки С.45. Стандартная библиотека шаблонов STL: контейнеры, итераторы, алгоритмы,аллокаторы.Контейнеры.Контейнер – шаблонный класс для хранения объектов какого-либо одного и того же типа.Контейнеры бывают различных типов. Например, в классе vector определяетсядинамический массив, queue – очередь, list – линейный список. Помимо таких базовыхконтейнеров, в библиотеке стандартных шаблонов определены и ассоциативныеконтейнеры, которые позволяют получать хранящиеся в них значения.
Например, вклассе map определён ассоциативный список, доступ к элементам которогоосуществляется с помощью уникальных ключей. Т.е. в таком списке элемент – это пара«значение-ключ».Контейнеры STL:Vector <T> – динамический массив.List <T> – линейный список.Stack <T> – стек.Queue <T> – очередь.Deque <T> – двусторонняя очередь.Priority_queue <T> – очередь с приоритетом.Set <T> – множество с уникальными элементами.Bitset <N> – множество битов.Multiset <T> – множество не обязательно с уникальными элементами.Map <key, val> – ассоциативный список, в котором хранятся пары ключ/значение,с каждым ключом связано одно значение.Multimap <key, val> – ассоциативный список, в котором хранятся парыключ/значение, с каждым ключом связано не обязательно одно значение.Основные типы:Следующие типы определены в public-части для каждого контейнера:value_typeallocator_type- распределитель памятиsize_typeiterator, const_iteratorreverse_iterator, const_reverse_iteratorpointer, const_pointer- указатель на элементыreference, const_reference- ссылка на элементыРаспределитель памяти.У каждого контейнера есть свой распределитель памяти allocator, который управляетпроцессом выделения памяти для объектов контейнера.
По умолчанию распределительпамяти – это объект класса allocator. Также можно написать свой распределитель памятии использовать его в программах, если STL не используем.Рассматриваем только интерфейс функций:template <class T> class allocator {………………………………………public:typedef T*pointer;typedef T&reference;………………………………………allocator( ) throw( );//- конструктор по умолчанию………………………………………pointer allocate (size_type n);}По умолчанию берётся стандартный распределитель памяти, он берёт память из областидинамической памяти.Алгоритмы.<algorithm>В STL имеется 60 алгоритмов.
Алгоритмы реализуют некоторые распространённыеоперации с контейнерами, которые не включены в контейнер. Т.е алгоритм – шаблоннаяфункция, поэтому их можно использовать с контейнерами любых типов.Алгоритмы подразделяются на 3 группы:· немодифицирующие алгоритмы – действия сводятся к просмотру контейнераили выделению из него какой-либо функции:find ( );- поиск элемента, выдаёт место, на котором находитсяэлемент.count ( );- подсчётfor_each( );· модифицирующие:transform ( );reverse ( );copy ( );- копируется содержимое одного контейнера в другой· сортировки:sort ( );- простая сортировкаstable_sort( ); - сортировка, гарантирующая сохранение относительнопорядка элементовmerge( );- слияние двух списков.Итераторы.Итераторы – это что-то вроде указателей на элементы контейнера.Типы итераторов перечислены в контейнере.
В public-части контейнера есть итераторныефункции с одинаковыми именами.Объекты класса итератора играют роль указателей для контейнера. Итераторыиспользуются для доступа к содержимому контейнера примерно так же, как указателидля доступа к элементам массива.Итераторный класс определяется внутри контейнера.Следует обратить внимание, что при использовании нужно писать оператор расширениявидимости, чтобы знать, к какому итератору относится написанное:list <int> :: iteratorДля итераторов нет константы NULL, обозначающей пустой указатель.reverse_iterator - обратный итератор, выдаёт последовательность в обратном порядке.Различие между этими итераторами:beginABC .endrbeginCBA .rendТипы итераторов:Существуют следующие типы операторов, которые позволяют соответствующиефункции:1.
Итераторы вывода.*p_ , p++2. Итераторы ввода.*=p, ->, ++, ==, !=3. Однонаправленные.*p=, =*p, ->, ++, ==, !=- положить в контейнер- взять из контейнера4. Двунаправленные.*p=, =*p, -> , ++, ==, !=, -5. C произвольным доступом.*p=, =*p, -> , ++, ==, !=, --, [ ], +, -, +=, -=, <, >, <=, >=С 1 до 5 увеличивается мощность итераторов.46. Стандартная библиотека шаблонов STL: шаблонные классы vector и list.Контейнер vector (схема):template <class T, class A = allocator <T>> class vector {- параметр распределения памяти, по умолчаниюберётсястандартный распределитель памяти……………………………………………..public://типы//итераторные функции//доступ к элементам/*const*/reference operator [ ] (size_type n);//доступ без контроля выхода задиапазон вектора/*const*/reference at (size_type n);//с контролем/*const*/reference front ( );//указатель на первый элементконтейнера/*const*/reference back ( );// указатель на последний элементконтейнераexplicit vector (const A& = A( ));// - здесь опускается имя формального параметра, работаетконструктор по умолчанию// explicit vector - вектор нулевой длины (когда данные записываютсяв вектор, сначала// создаётся такой вектор)explicit vector (site_type n; const T& value = T( ); const A& = A( ));………………………… // здесь определён конструктор копирования, оператор присваиванияи др.// функции – члены класса, частые в использованииiterator erase (iterator i);iterator insert (iterator i, const T& value = T( ));// - вставка перед этим элементом, возвращает итераторвставленного элементаvoid push_back ( );void pop_back ( ); // - удаляем последнюю запись вставленного элементаsizetype size ( ) const;bool empty ( ) const;void clear ( );// - очищаем вектор………………………….}Контейнер list (схема):template <class T, class A = allocator <T>> class list {public://типы//итераторные функции/*const*/reference front ( );//указатель на первый элементконтейнера/*const*/reference back ( );// указатель на последний элементконтейнераexplicit list (const A& = A( ));explicit list (site_type n; const T& value = T( ); const A& = A( ));//explicit – для безопасности, не позволяет делать присваивание векторов.…………………………iterator erase (iterator i);iterator insert (iterator i, const T& value = T( ));// - вставка перед этим элементом, возвращает итераторвставленногоэлементаvoid push_back ( );void pop_back ( ); // - удаляем последнюю запись вставленного элементаsizetype size ( ) const;bool empty ( ) const;void clear ( );// - очищаем вектор………………………….}.