🗊Презентация контейнеры STL

Нажмите для полного просмотра!
контейнеры STL, слайд №1контейнеры STL, слайд №2контейнеры STL, слайд №3контейнеры STL, слайд №4контейнеры STL, слайд №5контейнеры STL, слайд №6контейнеры STL, слайд №7контейнеры STL, слайд №8контейнеры STL, слайд №9контейнеры STL, слайд №10контейнеры STL, слайд №11контейнеры STL, слайд №12контейнеры STL, слайд №13контейнеры STL, слайд №14контейнеры STL, слайд №15контейнеры STL, слайд №16контейнеры STL, слайд №17контейнеры STL, слайд №18контейнеры STL, слайд №19контейнеры STL, слайд №20контейнеры STL, слайд №21контейнеры STL, слайд №22контейнеры STL, слайд №23контейнеры STL, слайд №24контейнеры STL, слайд №25контейнеры STL, слайд №26контейнеры STL, слайд №27контейнеры STL, слайд №28контейнеры STL, слайд №29контейнеры STL, слайд №30контейнеры STL, слайд №31контейнеры STL, слайд №32контейнеры STL, слайд №33контейнеры STL, слайд №34контейнеры STL, слайд №35контейнеры STL, слайд №36контейнеры STL, слайд №37контейнеры STL, слайд №38контейнеры STL, слайд №39контейнеры STL, слайд №40контейнеры STL, слайд №41контейнеры STL, слайд №42контейнеры STL, слайд №43контейнеры STL, слайд №44контейнеры STL, слайд №45контейнеры STL, слайд №46контейнеры STL, слайд №47контейнеры STL, слайд №48контейнеры STL, слайд №49контейнеры STL, слайд №50контейнеры STL, слайд №51контейнеры STL, слайд №52контейнеры STL, слайд №53контейнеры STL, слайд №54контейнеры STL, слайд №55контейнеры STL, слайд №56контейнеры STL, слайд №57контейнеры STL, слайд №58

Содержание

Вы можете ознакомиться и скачать презентацию на тему контейнеры STL. Доклад-сообщение содержит 58 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Тема 16 
Контейнеры STL
Описание слайда:
Тема 16 Контейнеры STL

Слайд 2





STL (standard template library) – библиотека стандартных методов и классов, входящая в состав любой системы программирования, основанной на языке C++. Эта библиотека основана на шаблонах.
STL (standard template library) – библиотека стандартных методов и классов, входящая в состав любой системы программирования, основанной на языке C++. Эта библиотека основана на шаблонах.
В состав STL входят:
потоковые классы;
классы для работы со строками (string);
контейнерные классы;
итераторы и алгоритмы для работы с контейнерными классами;
математические классы;
диагностические классы (в т.ч. класс exception);
прочие классы.
Описание слайда:
STL (standard template library) – библиотека стандартных методов и классов, входящая в состав любой системы программирования, основанной на языке C++. Эта библиотека основана на шаблонах. STL (standard template library) – библиотека стандартных методов и классов, входящая в состав любой системы программирования, основанной на языке C++. Эта библиотека основана на шаблонах. В состав STL входят: потоковые классы; классы для работы со строками (string); контейнерные классы; итераторы и алгоритмы для работы с контейнерными классами; математические классы; диагностические классы (в т.ч. класс exception); прочие классы.

Слайд 3





Для чего нужны контейнерные классы?
Контейнерные классы реализуют наиболее распространенные модели обработки и хранения данных. Они предназначены для хранения однородных данных. 
Элементом контейнера могут быть как стандартные типы, так и типы, определяемые пользователем. Если в качестве элемента контейнера выступает определенный пользователем класс, этот класс должен  содержать правильный конструктор без параметров, конструктор копирования и реализацию операции присваивания.
Описание слайда:
Для чего нужны контейнерные классы? Контейнерные классы реализуют наиболее распространенные модели обработки и хранения данных. Они предназначены для хранения однородных данных. Элементом контейнера могут быть как стандартные типы, так и типы, определяемые пользователем. Если в качестве элемента контейнера выступает определенный пользователем класс, этот класс должен содержать правильный конструктор без параметров, конструктор копирования и реализацию операции присваивания.

Слайд 4





Классификация контейнеров
Описание слайда:
Классификация контейнеров

Слайд 5





Различия в типах контейнеров
Последовательные контейнеры обеспечивают хранение однотипных величин в виде непрерывной последовательности, т.е. определены понятия "начальный элемент", "конечный элемент", "предыдущий элемент", "последующий элемент ";
Использование ассоциативных контейнеров предполагает, что в хранимых данных выделяется ключ, который определяет конкретный элемент хранимых данных, и неключевая информация. Ассоциативные контейнеры обеспечивают быстрый доступ к данным по значениям ключа.
Описание слайда:
Различия в типах контейнеров Последовательные контейнеры обеспечивают хранение однотипных величин в виде непрерывной последовательности, т.е. определены понятия "начальный элемент", "конечный элемент", "предыдущий элемент", "последующий элемент "; Использование ассоциативных контейнеров предполагает, что в хранимых данных выделяется ключ, который определяет конкретный элемент хранимых данных, и неключевая информация. Ассоциативные контейнеры обеспечивают быстрый доступ к данным по значениям ключа.

Слайд 6





Различия в типах контейнеров
Адаптеры реализованы на основе базовых последовательных контейнеров и предназначены для выполнения ограниченного набора операций. Каждый адаптер строится с использованием механизма реализации конкретного базового класса.
Описание слайда:
Различия в типах контейнеров Адаптеры реализованы на основе базовых последовательных контейнеров и предназначены для выполнения ограниченного набора операций. Каждый адаптер строится с использованием механизма реализации конкретного базового класса.

Слайд 7





Создание контейнеров
Для создания контейнера необходимо в качестве параметра шаблона указать тип данных, хранящихся в шаблоне:
vector <int> v;
Для создания адаптера, кроме типа данных, можно указывать базовый контейнер, используемый для создания адаптера:
stack <double> s1; 
// базовый контейнер – deque <double>
stack <int, vector <int> > s2;
Описание слайда:
Создание контейнеров Для создания контейнера необходимо в качестве параметра шаблона указать тип данных, хранящихся в шаблоне: vector <int> v; Для создания адаптера, кроме типа данных, можно указывать базовый контейнер, используемый для создания адаптера: stack <double> s1; // базовый контейнер – deque <double> stack <int, vector <int> > s2;

Слайд 8





Итераторы
Итератор используется для доступа к элементам контейнера. Итератор является аналогом указателя на элемент, хотя физическая природа итератора может и не предполагать хранение адресов. Все, что требуется от итератора – уметь ссылаться на элемент контейнера и обеспечить переход к другому элементу (чаще всего к последующему или к предыдущему).
Итераторы делятся на прямые и реверсивные. Прямые итераторы используются при переходах от первого к последнему элементу контейнера, реверсивные – в обратном порядке.
Описание слайда:
Итераторы Итератор используется для доступа к элементам контейнера. Итератор является аналогом указателя на элемент, хотя физическая природа итератора может и не предполагать хранение адресов. Все, что требуется от итератора – уметь ссылаться на элемент контейнера и обеспечить переход к другому элементу (чаще всего к последующему или к предыдущему). Итераторы делятся на прямые и реверсивные. Прямые итераторы используются при переходах от первого к последнему элементу контейнера, реверсивные – в обратном порядке.

Слайд 9





Определение итераторов
Итератор описан в каждом контейнере как вспомогательный класс, поэтому при определении итератора необходимо указывать контейнер, для которого итератор будет использоваться:
vector <int> :: iterator i1; // правильно
vector :: iterator i2; // неправильно
iterator i3; // неправильно
Можно сделать и так:
typedef vector <int> :: iterator it_vint;
it_vint i1, i2, i3;
Описание слайда:
Определение итераторов Итератор описан в каждом контейнере как вспомогательный класс, поэтому при определении итератора необходимо указывать контейнер, для которого итератор будет использоваться: vector <int> :: iterator i1; // правильно vector :: iterator i2; // неправильно iterator i3; // неправильно Можно сделать и так: typedef vector <int> :: iterator it_vint; it_vint i1, i2, i3;

Слайд 10





Действительные и недействительные итераторы
Итераторы могут быть действительными и недействительными. Действительный итератор связан с конкретным элементом контейнера, и мы можем получить доступ к этому элементу, используя итератор. С недействительными итераторами так поступать нельзя.
Итераторы становятся недействительными:
после определения, но до инициализации;
при выходе за границы контейнера;
после удаления элемента, с которым был связан итератор;
после вставки в вектор и deque (иногда);
в результате присвоения значения метода end(), rend().
Описание слайда:
Действительные и недействительные итераторы Итераторы могут быть действительными и недействительными. Действительный итератор связан с конкретным элементом контейнера, и мы можем получить доступ к этому элементу, используя итератор. С недействительными итераторами так поступать нельзя. Итераторы становятся недействительными: после определения, но до инициализации; при выходе за границы контейнера; после удаления элемента, с которым был связан итератор; после вставки в вектор и deque (иногда); в результате присвоения значения метода end(), rend().

Слайд 11





Основные операции над итераторами
Пусть i – итератор, n – целое число, c - контейнер
Все итераторы
*i – получение доступа к элементу контейнера, с которым связан итератор;
i++ – после этой операции итератор становится связанным со следующим элементом контейнера
i+n – перемещение итератора на n элементов (при этом возможен выход за границы контейнера!). Для итераторов, связанных с контейнером list, эта операция недопустима
i1 = i2 – присваивание
i1 == i2, i1 != i2 – сравнение (других операций сравнения нет!)
Описание слайда:
Основные операции над итераторами Пусть i – итератор, n – целое число, c - контейнер Все итераторы *i – получение доступа к элементу контейнера, с которым связан итератор; i++ – после этой операции итератор становится связанным со следующим элементом контейнера i+n – перемещение итератора на n элементов (при этом возможен выход за границы контейнера!). Для итераторов, связанных с контейнером list, эта операция недопустима i1 = i2 – присваивание i1 == i2, i1 != i2 – сравнение (других операций сравнения нет!)

Слайд 12





Основные операции над итераторами
Пусть i – итератор, n – целое число, c – контейнер
Прямые итераторы
i = c.begin() – итератор связывается с первым элементом контейнера c;
i = c.end() – итератор связывается с фиктивным элементом контейнера c, который «стоит» за последним элементом. Итератор i становится недействительным!
Описание слайда:
Основные операции над итераторами Пусть i – итератор, n – целое число, c – контейнер Прямые итераторы i = c.begin() – итератор связывается с первым элементом контейнера c; i = c.end() – итератор связывается с фиктивным элементом контейнера c, который «стоит» за последним элементом. Итератор i становится недействительным!

Слайд 13





Основные операции над итераторами
Реверсивные итераторы
i = c.rbegin() – итератор связывается с последним элементом контейнера c;
i = c.rend() – итератор связывается с фиктивным элементом контейнера c, который «стоит» перед первым элементом. Итератор i становится недействительным!
Описание слайда:
Основные операции над итераторами Реверсивные итераторы i = c.rbegin() – итератор связывается с последним элементом контейнера c; i = c.rend() – итератор связывается с фиктивным элементом контейнера c, который «стоит» перед первым элементом. Итератор i становится недействительным!

Слайд 14





Примеры работы с итераторами
просмотр всех элементов списка
просмотр всех элементов списка в обратном порядке
Описание слайда:
Примеры работы с итераторами просмотр всех элементов списка просмотр всех элементов списка в обратном порядке

Слайд 15





Интервал
Интервал – несколько подряд идущих элементов контейнера. Интервал задаётся двумя итераторами i1 и i2. Итератор i1 связан с первым элементом, входящим в интервал, а i2 – с элементом, стоящим за последним элементом интервала. Если i2 == c.end(), то в интервал входят последние элементы контейнера. Если i1 == i2, то интервал пуст.
Описание слайда:
Интервал Интервал – несколько подряд идущих элементов контейнера. Интервал задаётся двумя итераторами i1 и i2. Итератор i1 связан с первым элементом, входящим в интервал, а i2 – с элементом, стоящим за последним элементом интервала. Если i2 == c.end(), то в интервал входят последние элементы контейнера. Если i1 == i2, то интервал пуст.

Слайд 16





Операции над последовательными контейнерами
Следующие операции допустимы над всеми последовательными контейнерами:
вставка в начало контейнера (перед первым элементом) – push_front;
вставка в конец контейнера (после последнего элемента) – push_back;
удаление начального элемента – pop_front;
удаление последнего элемента – pop_back;
вставка в произвольное место – insert;
удаление из произвольного места – erase;
доступ к элементу по его индексу – at или [].
Описание слайда:
Операции над последовательными контейнерами Следующие операции допустимы над всеми последовательными контейнерами: вставка в начало контейнера (перед первым элементом) – push_front; вставка в конец контейнера (после последнего элемента) – push_back; удаление начального элемента – pop_front; удаление последнего элемента – pop_back; вставка в произвольное место – insert; удаление из произвольного места – erase; доступ к элементу по его индексу – at или [].

Слайд 17





Допустимость и трудоёмкость операций для различных типов последовательных контейнеров
Описание слайда:
Допустимость и трудоёмкость операций для различных типов последовательных контейнеров

Слайд 18





Основные типы, используемые при работе с последовательными контейнерами
Описание слайда:
Основные типы, используемые при работе с последовательными контейнерами

Слайд 19





Параметры и результаты операций над последовательными контейнерами
Описание слайда:
Параметры и результаты операций над последовательными контейнерами

Слайд 20





Параметры и результаты операций над последовательными контейнерами
Описание слайда:
Параметры и результаты операций над последовательными контейнерами

Слайд 21





Параметры и результаты операций над последовательными контейнерами
Описание слайда:
Параметры и результаты операций над последовательными контейнерами

Слайд 22





Параметры и результаты операций над последовательными контейнерами
Описание слайда:
Параметры и результаты операций над последовательными контейнерами

Слайд 23





Конструкторы последовательных контейнеров (на примере vector)
Описание слайда:
Конструкторы последовательных контейнеров (на примере vector)

Слайд 24





Примеры работы с последовательными контейнерами
Описание слайда:
Примеры работы с последовательными контейнерами

Слайд 25





Примеры работы с последовательными контейнерами
Описание слайда:
Примеры работы с последовательными контейнерами

Слайд 26





Примеры работы с последовательными контейнерами
Описание слайда:
Примеры работы с последовательными контейнерами

Слайд 27





Особенности работы с контейнером vector
Описание слайда:
Особенности работы с контейнером vector

Слайд 28





Примеры управления распределением памяти
Описание слайда:
Примеры управления распределением памяти

Слайд 29





Примеры управления распределением памяти (продолжение)
Описание слайда:
Примеры управления распределением памяти (продолжение)

Слайд 30





Примеры управления распределением памяти (продолжение)
Описание слайда:
Примеры управления распределением памяти (продолжение)

Слайд 31





Особенности работы с контейнером list
Описание слайда:
Особенности работы с контейнером list

Слайд 32





Особенности работы с контейнером list
Описание слайда:
Особенности работы с контейнером list

Слайд 33





Примеры работы с контейнером list
Описание слайда:
Примеры работы с контейнером list

Слайд 34





Примеры работы с контейнером list (продолжение)
Описание слайда:
Примеры работы с контейнером list (продолжение)

Слайд 35





Примеры работы с контейнером list (продолжение)
Описание слайда:
Примеры работы с контейнером list (продолжение)

Слайд 36





Примеры работы с контейнером list (продолжение)
Описание слайда:
Примеры работы с контейнером list (продолжение)

Слайд 37





Адаптеры
Описание слайда:
Адаптеры

Слайд 38





Адаптеры
По умолчанию приоритет элемента, помещаемого в priopity_queue – его значение
Описание слайда:
Адаптеры По умолчанию приоритет элемента, помещаемого в priopity_queue – его значение

Слайд 39





Пример работы с адаптером priority_queue
Описание слайда:
Пример работы с адаптером priority_queue

Слайд 40





Пример работы с адаптером priority_queue (продолжение)
Описание слайда:
Пример работы с адаптером priority_queue (продолжение)

Слайд 41





Ассоциативные контейнеры
Описание слайда:
Ассоциативные контейнеры

Слайд 42





Типы ассоциативных контейнеров
Описание слайда:
Типы ассоциативных контейнеров

Слайд 43





Вспомогательный класс pair
template <typename T1, typename T2> class pair
{
  T1 first;
  T2 second;
};
template <typename T1, typename T2> 
pair <T1, T2> make_pair (T1 a, T2 b);
Описание слайда:
Вспомогательный класс pair template <typename T1, typename T2> class pair { T1 first; T2 second; }; template <typename T1, typename T2> pair <T1, T2> make_pair (T1 a, T2 b);

Слайд 44





Работа с контейнером map
Класс map является шаблоном, зависящим от двух или трех параметров: 
типа ключа; 
типа неключевых данных;
функционального класса, определяющего правила сравнения ключей (если для ключевого класса определена стандартная операция «меньше», третий параметр указывать не обязательно).
Описание слайда:
Работа с контейнером map Класс map является шаблоном, зависящим от двух или трех параметров: типа ключа; типа неключевых данных; функционального класса, определяющего правила сравнения ключей (если для ключевого класса определена стандартная операция «меньше», третий параметр указывать не обязательно).

Слайд 45





Примеры описаний контейнера map
#include <map>
using namespace std;
map <int, string> m1;
// ключ целое число, неключевые данные – строки

map <int, string, greater <int> > m2;
// использование стандартного функционального
// класса greater <int> позволяет сортировать по 
// убыванию

map <int, pair <string, int> > m3;
// неключевые данные – структура из двух полей
Описание слайда:
Примеры описаний контейнера map #include <map> using namespace std; map <int, string> m1; // ключ целое число, неключевые данные – строки map <int, string, greater <int> > m2; // использование стандартного функционального // класса greater <int> позволяет сортировать по // убыванию map <int, pair <string, int> > m3; // неключевые данные – структура из двух полей

Слайд 46





Пример работы с контейнером map
Задача: Вывести на консоль количество, а также все элементы контейнера в порядке убывания ключей
typedef map <int, string, greater <int> > m2;
typedef map <int, string, greater <int> > :: iterator it_m2;
m2 M2; 
void WriteMap(m2 L) {
	cout << L.size() << ":\n";
	for (it_m2 i = L.begin(); i!=L.end(); i++) {
		cout  << i->first<< " ";
		cout.write((i->second).c_str(), 
                          (i->second).size());
		cout << "\n";
	}
  cout << endl;
}
Описание слайда:
Пример работы с контейнером map Задача: Вывести на консоль количество, а также все элементы контейнера в порядке убывания ключей typedef map <int, string, greater <int> > m2; typedef map <int, string, greater <int> > :: iterator it_m2; m2 M2; void WriteMap(m2 L) { cout << L.size() << ":\n"; for (it_m2 i = L.begin(); i!=L.end(); i++) { cout << i->first<< " "; cout.write((i->second).c_str(), (i->second).size()); cout << "\n"; } cout << endl; }

Слайд 47





Пример работы с контейнером map (продолжение)
int main() {
	M2.insert(make_pair(15, "fifteen"));
	M2.insert(make_pair(10, "ten"));
	M2.insert(make_pair(50, "fifty"));
	WriteMap(M2);
  return 0;
}
Описание слайда:
Пример работы с контейнером map (продолжение) int main() { M2.insert(make_pair(15, "fifteen")); M2.insert(make_pair(10, "ten")); M2.insert(make_pair(50, "fifty")); WriteMap(M2); return 0; }

Слайд 48





Реализация телефонной книги контейнером map
Ключ: информация о владельце контакта (ФИО, название учреждения, ник)
Неключевые данные: информация о контакте (номер телефона, e-mail)
typedef map <string, string> phb;
typedef phb::iterator phb_it;
phb Phb;
Описание слайда:
Реализация телефонной книги контейнером map Ключ: информация о владельце контакта (ФИО, название учреждения, ник) Неключевые данные: информация о контакте (номер телефона, e-mail) typedef map <string, string> phb; typedef phb::iterator phb_it; phb Phb;

Слайд 49





Перегрузка операции индексации для контейнера map
В классе map переопределена операция взятия индекса
T& operator[](const Key&)
так, что с помощью этой операции можно осуществлять поиск данных по ключу или изменять содержимое неключевых данных. Эта же операция дает возможность вставлять новый элемент контейнера
Phb[”kash”] = ”123456789”; 
// вставляем новый элемент с ключом ”kash”
// и номером телефона ”123456789”
cout << Phb["kash"] << endl; 
// результат – строка ”123456789” 
cout << Phb["pupkin"] << endl; 
// результат – пустая строка, т.к. ключ не найден. 
// Однако в словарь будет вставлен новый элемент!
Описание слайда:
Перегрузка операции индексации для контейнера map В классе map переопределена операция взятия индекса T& operator[](const Key&) так, что с помощью этой операции можно осуществлять поиск данных по ключу или изменять содержимое неключевых данных. Эта же операция дает возможность вставлять новый элемент контейнера Phb[”kash”] = ”123456789”; // вставляем новый элемент с ключом ”kash” // и номером телефона ”123456789” cout << Phb["kash"] << endl; // результат – строка ”123456789” cout << Phb["pupkin"] << endl; // результат – пустая строка, т.к. ключ не найден. // Однако в словарь будет вставлен новый элемент!

Слайд 50





Другие методы ассоциативных контейнеров
Описание слайда:
Другие методы ассоциативных контейнеров

Слайд 51





Другие методы ассоциативных контейнеров (продолжение)
Описание слайда:
Другие методы ассоциативных контейнеров (продолжение)

Слайд 52





Другие методы ассоциативных контейнеров (продолжение)
Описание слайда:
Другие методы ассоциативных контейнеров (продолжение)

Слайд 53





Примеры работы с телефонной книгой
1. Найти телефон по фамилии или выдать сообщение об отсутствии данных.
cout << "Enter name: ";
cin >> N1;
phb_it i = Phb.find(N1);
cout << (i == Phb.end() ? "Record not found" : (*i).second) << endl;
2. Выдать содержимое телефонной книги с именами, начинающимися на ”k”.
for (phonebook::iterator i=Phb.lower_bound("k");   
                     i!=Phb.lower_bound("l"); i++)
    cout << (*i).first << ":" << (*i).second << endl;
Описание слайда:
Примеры работы с телефонной книгой 1. Найти телефон по фамилии или выдать сообщение об отсутствии данных. cout << "Enter name: "; cin >> N1; phb_it i = Phb.find(N1); cout << (i == Phb.end() ? "Record not found" : (*i).second) << endl; 2. Выдать содержимое телефонной книги с именами, начинающимися на ”k”. for (phonebook::iterator i=Phb.lower_bound("k"); i!=Phb.lower_bound("l"); i++) cout << (*i).first << ":" << (*i).second << endl;

Слайд 54





Примеры работы с телефонной книгой (продолжение)
3. Вставить новый элемент по паре «ключ – неключевые данные».
Phb.insert(phb::value_type("kirill","2353555"));
4. Удалить все записи с пустыми номерами телефонов.
phb_it i, j;
for (i=Phb.begin(); i != Phb.end();) {
  j=i;
  i++;
  if ((*j).second.length()==0) {
    cout << "Deleting: " << (*j).first << endl; 
    Phb.erase(j);
  }
}
Описание слайда:
Примеры работы с телефонной книгой (продолжение) 3. Вставить новый элемент по паре «ключ – неключевые данные». Phb.insert(phb::value_type("kirill","2353555")); 4. Удалить все записи с пустыми номерами телефонов. phb_it i, j; for (i=Phb.begin(); i != Phb.end();) { j=i; i++; if ((*j).second.length()==0) { cout << "Deleting: " << (*j).first << endl; Phb.erase(j); } }

Слайд 55





Класс multimap
Описание слайда:
Класс multimap

Слайд 56





Примеры работы с классом multimap
Описание слайда:
Примеры работы с классом multimap

Слайд 57





Примеры работы с классом multimap (продолжение)
Описание слайда:
Примеры работы с классом multimap (продолжение)

Слайд 58





Классы set, multiset
Описание слайда:
Классы set, multiset



Похожие презентации
Mypresentation.ru
Загрузить презентацию