cpp2
.pdfОбъектно-ориентированное программирование
Шаблоны и обобщенное программирование
О.А.Мирзеабасов
Кафедра ИС
Осень 2015
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
1 / 16 |
Содержание
1 Шаблоны классов
2 STL
3 Контейнеры
4 vector
5 Строки в C++
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
2 / 16 |
Шаблоны классов
template <typename Tl, typename T2>class pair { public:
Tl first; T2 second;
pair(Tl x, T2 y) : first(x), second(y) { }
};
typedef pair<int, double> idpair;
int main(){
idpair x(999,3.1459); pair<int,int> iip(1,2); return 0;
}
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
3 / 16 |
STL
STL, или Standard Template Library (стандартная библиотека шаблонов) — библиотека обобщенных алгоритмов и структур данных общего назначения.
Все компоненты STL определены в пространстве имен std.
STL содержит компоненты шести основных видов:
контейнеры
обобщенные алгоритмы
итераторы
функциональные объекты
адаптеры
аллокаторы.
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
4 / 16 |
Контейнеры
Контейнеры в STL представляют собой объекты, которые хранят коллекции других объектов.
Имеются две категории контейнеров STL:
контейнеры последовательностей;
отсортированные ассоциативные контейнеры.
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
5 / 16 |
Каждый класс контейнера STL определяет и делает общедоступными несколько типов.
value_type. Тип элементов, хранящихся в контейнере (Т).
pointer. Тип указателя на элементы контейнера (обычно
Т*).
reference. Тип размещения элементов контейнера (обычно
Т&).
iterator. Тип итератора, ссылающегося на значения типа reference.
difference_type. Знаковый целочисленный тип, который может представлятьразность между двумя итераторами.
size_type. Беззнаковый целочисленный тип, который может представлять любое неотрицательное значение типа difference_type.
reverse_iterator. Тип «обратного» итератора.
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
6 / 16 |
Контейнеры последовательностей
Контейнеры последовательностей организуют набор объектов одного и того же типа Т в строго линейную последовательность.
ВSTL имеются следующие контейнеры последовательностей:
vector<T> — вектор, последовательность переменной длины с эффективным произвольным доступом
deque<T> — двусторонняя очередь, эффективны операции добавления и удаления на границах последовательности (начало и конец)
list<T> — список, эффективны операции добавления и удаления в любом месте последовательности.
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
7 / 16 |
Ассоциативные контейнеры
Ассоциативные контейнеры обеспечивают возможность быстрой выборки объектов из коллекции на основе значения ключа. Размер коллекции может изменяться во время работы программы.
В STL имеется четыре типа отсортированных ассоциативных контейнеров.
set<Key>
multiset<Key>
map<Key,T>
multimap<Key,T>
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
8 / 16 |
Методы, общие для всех контейнеров
Итераторы:
iterator begin(); iterator end(); reverse_iterator rbegin(); reverse_iterator rend();
Размер контейнера:
size_type size(); size_type max_size(); bool empty();
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
9 / 16 |
vector
Векторы представляют собой последовательные контейнеры с произвольным доступом к последовательностям переменной длины, а также с быстрой вставкой и удалением в конце.
#include <vector> #include <stdio.h> using namespace std; int main(){ vector<int> iv;
for(int i=0;i<10;++i)iv.push_back(i); for(vector<int>::iterator it=iv.begin();
it!=iv.end();++it){
printf("%d\n",*it);
}
return 0;
}
О.А.Мирзеабасов (Кафедра ИС) |
ООП |
Осень 2015 |
10 / 16 |