Стандартна бібліотека шаблонів Standard Template Library, STL Література Эккель Б., Эллисон Ч. Философия С++, т.2, гл 5.-"Питер",2004. Вандевурд Д., Джосатисс Н. Шаблоны С++: справочник разработчика.- М.:"Вильямс",2003. 'You may call it "nonsense" if you like,' she said, 'but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!‘ Lewis Carroll Through the Looking-Glass
Архітектура бібліотеки Компоненти STL: контейнери – структури для зберігання даних; ітератори – засоби, які володіють методами для обходу контейнерів і доступу до даних; алгоритми – глобальні функції для обробки даних; об’єкти-функції – класи, в яких перевантажено оператор виклику функції; використання об’єктів подібне до виклику функції; адаптери – модифікатори інтерфейсу компонент: адаптери-контейнери адаптери-ітератори адаптери-функції
Види контейнерів Контейнери-послідовності (sequence containers) у кожний поточний момент існує певний порядок слідування елементів у контейнері: елементами є безпосередньо об'єкти послідовний обхід всіх елементів контейнера передача підпослідовностей в алгоритми для обробки рекомендованим засобом для перебору елементів є ітератор, який і забезпечує потрібний напрямок переміщень в контейнері Асоціативні контейнери (associative containers) елементами є пари ключ-об'єкт структура зберігання – бінарне дерево завжди відсортований контейнер за значенням ключа доступ за значенням ключа
Асоціативні контейнери Відображення (асоціативний масив) map Мультивідображення multimap Множина set Мультимножина multiset Ключ: набуває значення в межах будь-якого типу, який допускає впорядкування у відображеннях значення ключа не може повторюватися у мультивідображеннях можуть зберігатися пари з однаковими значеннями ключа Множини і мультимножини є частковими випадками відображення та мультивідображення, об’єктами зберігання в них є лише ключі.
Допоміжні типи асоціативних масивів template struct pair; template class _Tree; template // true if multiple equivalent keys are permitted class _Tmap_traits : public _Container_base { // traits required to make _Tree behave like a map public: typedef _Kty key_type; typedef pair value_type; typedef _Pr key_compare; . . . _Pr comp; // the comparator predicate for keys };
struct pair template struct pair {//store a pair of values typedef pair Myt; typedef Ty1 first_type; typedef Ty2 second_type; pair() : first( Ty1()), second( Ty2()){} pair(const Ty1& val1, const Ty2& val2) : first(val1), second(val2){}// construct from specified values template pair(const pair & right) // construct from compatible pair : first(right.first),second(right.second){} void swap(Myt& right) { // exchange contents with right std::swap(first, right.first); std::swap(second, right.second); } Ty1 first; // the first stored value Ty2 second; // the second stored value };
template, class _Alloc = allocator > > class map : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false> >{ map(); explicit map(const key_compare& _Pred); map(const key_compare& _Pred, const allocator_type&_Al); template map(_Iter _First, _Iter _Last); template map(_Iter _First, _Iter _Last,const key_compare&_Pred); template map(_Iter _First, _Iter _Last,const key_compare& _Pred, const allocator_type& _Al); mapped_type& operator[](const key_type& _Keyval); // find element matching _Keyval or insert with default mapped }; class map-2
Допоміжні типи множин template // true if multiple equivalent keys are permitted class _Tset_traits : public _Container_base { // traits required to make _Tree behave like a set public: typedef _Kty key_type; typedef _Kty value_type; typedef _Pr key_compare; . . . _Pr comp; // the comparator predicate for keys };
Методи встановлення контейнерних ітераторів по 2 варіанти перевантажених методів константний метод використовується у випадках: контейнер оголошений константним ініціалізація константних ітераторів чи параметрів
Методи вставки і пошуку в масиві
Методи модифікації масиву
Методи повернення характеристик контейнера
Глобальні операції порівняння У таблиці під назвою cont треба розуміти конкретну назву типу послідовного контейнера.