Библиотека STL. Тип vector презентация

Содержание

Слайд 2

STL – Standard Template Library Стандартная библиотека шаблонов Vector Pair

STL – Standard Template Library

Стандартная библиотека шаблонов
Vector
Pair (пары)
Map (Словари)
Деки
Списки
Очереди
Битовые поля
И др.

Слайд 3

Тип vector Объявление #include … vector A; Или vector A(10);

Тип vector Объявление

#include

vector A;
Или
vector A(10);
Или
vector A(10, 1);

Задание.
Объявите вектор

и выведите его на экран.
Чем различаются эти способы?
Слайд 4

Резервирование памяти vector A; A.reserve(10); Аналогично int A[10]; // обычное объявление массива

Резервирование памяти

vector A;
A.reserve(10);
Аналогично
int A[10]; // обычное объявление массива

Слайд 5

Слайд 6

Как скопировать вектор? Vector myVector1(10); For (int i = 0; i myVector1[i] = i; vector myVector2(myVector1);

Как скопировать вектор?

Vector myVector1(10);
For (int i = 0; i <10;

i++)
myVector1[i] = i;
vector myVector2(myVector1);
Слайд 7

Методы для контейнера в STL

Методы для контейнера в STL

Слайд 8

Слайд 9

Слайд 10

Вопросы и задания: Программист забыл удалить динамический массив, память для

Вопросы и задания:

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

внутри функции. Какие проблемы могут возникнуть из-за этой ошибки?
Какие значения будут иметь значения массива А?
int * A = new double [5] { };
Как расширить вектор в ходе выполнения программы?
Слайд 11

Что получим в результате? Почему?

Что получим в результате?

Почему?

Слайд 12

Слайд 13

Слайд 14

Практикум Задача №112484. Реверс массива неизвестной длины

Практикум

Задача №112484. Реверс массива неизвестной длины

Слайд 15

Итераторы Итераторы (курсоры, указатели) – специальные объекты, которые позволяют перебрать

Итераторы

Итераторы (курсоры, указатели) – специальные объекты, которые позволяют перебрать все элементы

контейнера.
Объявление:
Vector :: iterator it;
Итератор – специальный указатель на элемент вектора.
Слайд 16

Итераторы It = a.begin(); *it=100; Cout // то же, что a[0]=100; // то же, что cout

Итераторы

It = a.begin();
*it=100;
Cout << *it;

// то же, что a[0]=100;
// то же,

что cout << a[0];
Слайд 17

Слайд 18

Слайд 19

Слайд 20

Методы для контейнера в STL

Методы для контейнера в STL

Слайд 21

Алгоритмы для контейнера в STL

Алгоритмы для контейнера в STL

Слайд 22

Алгоритмы для контейнера в STL

Алгоритмы для контейнера в STL

Слайд 23

Слайд 24

СТРУКТУРА PAIR Структура, позволяющая обрабатывать два объекта как один объект

СТРУКТУРА PAIR

Структура, позволяющая обрабатывать два объекта как один объект

Слайд 25

В программировании часто возникает необходимость обрабатывать два объекта, например, простую

В программировании часто возникает необходимость обрабатывать два объекта, например, простую пару

чисел, как один.
Причём типы обоих значений в паре могут быть совершенно разными – в этом и состоит особая ценность рассматриваемой структуры и на это необходимо обратить особое внимание.
Откликом на такую задачу одновременной обработки пары значений стало появление структуры pair
Слайд 26

Применение: Хранить 2D клетку карты. Хранить Координаты X и Y.

Применение:

Хранить 2D клетку карты.
Хранить Координаты X и Y.
Хранить тип переменной для

void*.
Если нужен индекс по двойному ключу. (имя-фамилия)
Слайд 27

int main () { pair p1 (10, 0.011); // объявляем

int main ()
{
pair p1 (10, 0.011); // объявляем пар
pair

double> p2;
p2 = make_pair (10, 0.222); // функция, обеспечивающая
// присвоение значений полям пары p2
pair p3 (p1); // копия уже созданной p1
cout.precision (3); // назначаем точность вывода действительных чисел
cout << "Пара p1 состоит из элементов : ( " << p1.first << ", " << p1.second << " )"
<< endl;
cout << "- p2 : ( " << p2.first << ", " << p2.second << " )" << endl;
cout << "- p3 : ( " << p3.first << ", " << p3.second << " )" << endl;
return 0;
}
Слайд 28

Слайд 29

Преимущества

Преимущества

Слайд 30

Преимущества

Преимущества

Слайд 31

Функция make_pair (a1,A2); создает объект типа, определяемых типов аргументов

Функция make_pair (a1,A2);

 создает объект типа, определяемых типов аргументов

Слайд 32

Преимущества

Преимущества

Слайд 33

Задание https://ru.surveymonkey.com/r/NB975GY

Задание

https://ru.surveymonkey.com/r/NB975GY

Слайд 34

КОНТЕЙНЕР SET Множество

КОНТЕЙНЕР SET

Множество

Слайд 35

#include В языке C++ контейнер set позволяет работать с различными

#include

В языке C++ контейнер set позволяет работать с различными множествами. Под множеством

понимают некоторое количество отсортированных элементов. 
Слайд 36

Что получим? Вместо insert можно использовать функцию emplace, которая перед

Что получим?

Вместо insert можно использовать функцию emplace, которая перед добавлением проверяет,

есть ли уже такой элемент, и если нет, то добавляет его.
Слайд 37

set s1; set s2; s1.emplace(5); s2.emplace("r"); s1.emplace(10); s2.emplace("f"); s1.emplace(15); s2.emplace("q");

set s1;
set s2;
s1.emplace(5);
s2.emplace("r");
s1.emplace(10);
s2.emplace("f");

s1.emplace(15);
s2.emplace("q");
for (auto a: s1)
cout << a<< ' ';
for (auto a: s2)
cout << a<< ' ';
Слайд 38

Set - контейнер, имеет все стандартные для контейнера функции: S.swap(S2)

Set - контейнер, имеет все стандартные для контейнера функции:

S.swap(S2) - меняет содержимое контейнеров

местами,
S.insert(a) - вставка элемента a,
S.erase(S2) - удаляет последовательность элементов,
S.clear() - очистка контейнера set,
S.count() - количество элементов в контейнере,
S.find(a) - найти элемент a в контейнере,
S.lower_bound(a) - первый элемент, не меньший чем a,
S.upper_bound(a) - первый элемент, больший чем a,
S.equal_range(a) - пара элементов, первый - нижняя граница элементов с, такими же значениями, что и a, второй - верхняя граница элементов с такими же значениями, что и a.
Слайд 39

Работа с памятью: S.size() - размер контейнера S.max_size() - максимальный

Работа с памятью:

S.size() - размер контейнера
S.max_size() - максимальный размер контейнера

S.begin() - указатель на начало

контейнера
S.end() - указатель на конец контейнера
S.rbegin() - реверсивный указатель на конец контейнера
S.rend() - реверсивный указатель на начало контейнера

РАБОТА С КОНТЕЙНЕРОМ:

Слайд 40

КАК ВЫВЕСТИ СОДЕРЖИМОЕ SET В ЦИКЛЕ? for (auto a: s1) cout

КАК ВЫВЕСТИ СОДЕРЖИМОЕ SET В ЦИКЛЕ?

for (auto a: s1)
cout <<

a << ' ';
Слайд 41

#include #include #include #include using namespace std; int main() {

#include
#include
#include
#include
using namespace std;
int main() {
set data_set;

// создается множество
data_set.insert(10);
// добавить число 10
for (int x = 1; x <= 5; x++)
data_set.insert(x * 5);
// добавить числа 5, 10, 15, 20, 25
for (set::iterator p = data_set.begin(); p != data_set.end(); p++)
cout << *p << " ";
int min_element = *data_set.begin();
cout << endl << min_element;
return 0;
}
Слайд 42

Плюсы и минусы использования set и multiset Плюсы Быстрая сортировка

Плюсы и минусы использования set и multiset

Плюсы
Быстрая сортировка элементов

Минусы
Нельзя обратится к конкретной ячейке по

индексу [].
Если у вас мало обращений к определенным ячейкам, то использовать однозначно нужно.
Если же вам придется очень часто обращаться к произвольным ячейкам — то использовать лучше vector или массив, если это возможно.
Слайд 43

Задания Используйте шаблон set для построения двух множеств целых чисел

Задания

Используйте шаблон set для построения двух множеств целых чисел вычисления их объединения и

пересечения.
Используйте шаблон multiset для подсчета числа вхождений каждого числа во множество целых чисел с повторами.
Слайд 44

КОНТЕЙНЕР MAP Ассоциативный словарь

КОНТЕЙНЕР MAP

Ассоциативный словарь

Слайд 45

Задача В файле находится список слов, среди которых есть повторяющиеся.

Задача

В файле находится список слов, среди которых есть повторяющиеся. Каждое слово

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

Список – это упорядоченный набор элементов одного типа, для которого введены операции вставки (включения) и удаления (исключения).

B C++ : Map («отображение») – это словарь (ассоциативный массив). Индексы элементов – любые данные.

Слайд 46

Объявляются сразу два типа переменных (первый тип – string, второй тип — int)

Объявляются сразу два типа переменных
(первый тип – string, второй тип — int)

Слайд 47

Слайд 48

Слайд 49

Обратите внимание! map можно использовать в виде ассоциативного массива. Массива

Обратите внимание!

map можно использовать в виде ассоциативного массива. Массива который позволяет в

себе хранить пару вида («ключ», «значение»), а так-же добавлять и удалять пары по ключу.
У нас в роли ключа выступает тип string,  а в роли значения тип int.
вывод осуществляется в алфавитном порядке, а заполнение map нет.
Контейнер  map  сам выполняет сортировку по алфавиту
Слайд 50

Обратите внимание! осуществляется вывод с помощью итератора it. Итератор it

Обратите внимание!

осуществляется вывод с помощью итератора it.
Итератор it сначала указывает на начало map и с

каждой новой итерацией увеличивается, пока не достигнет конца map.
Запись вида it->first означает, что it при первой итерации указывает на строку Mother, потом на Father и так далее до конца цикла,
соответственно, запись вида it->second означает, что it при первой итерации указывает на число 37, потом на 40 и так далее.
Слайд 51

Строка 22 содержит функцию map::insert(), которая вставляет элементы в map.

Строка 22 содержит функцию map::insert(), которая вставляет элементы в  map.
Запись вида pair(c,i) означает, что в

  map помещаются две переменные типа char и int (первая – char, вторая — int),
где типу char соответствует  переменная c, а типу int соответствует  переменная i.
В строке 20 при каждой новой итерации наши переменные будут увеличиваться, т. е. сначала i=0, c=a, при следующей итерации i=1, c=b и т. д.
Слайд 52

В строке 28 показан альтернативный вывод map с помощью указателей.

В строке 28 показан альтернативный вывод map с помощью указателей.
map не может содержать два одинаковых значения,

но multimap решает эту проблему
Multimap ничем не отличается от map, за исключением того, что в нем можно хранить повторяющиеся элементы
Слайд 53

Слайд 54

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

Про работу с итераторами:

Для обращения к элементу в строках и векторах достаточно было перед именем

контейнера поставить *, но в map так не получится, т.к. в каждом элементе хранится 2 значения (ключ и данные).
Поэтому надо писать так:
(*iter).first - для обращения к ключу и
(*iter).second -для обращения к данным,
где iter - итератор элемента
Вместо громоздкой записи
(*it).first
и
(*it).second
можно использовать более компактный оператор доступа к полю через указатель “->”:
it->first
it->second
Слайд 55

Слайд 56

Слайд 57

Слайд 58

Повторим Для чего нужны словари? Как объявить? Как вывести? В чем отличие MAP от MULTYMAP?

Повторим

Для чего нужны словари?
Как объявить?
Как вывести?
В чем отличие MAP от MULTYMAP?

Слайд 59

Плюсы и минусы: использования map Плюсы: Ключом может быть любая

Плюсы и минусы: использования map

Плюсы:
Ключом может быть любая переменная. Это огромный

плюс, например если придется делать словарь.
Минусы:
Долгое добавление нового элемента.
Долгое обращение к элементу.
Долгое удаление нового элемента.
Также слишком затратный по памяти
Все эти операции происходят за — log n (n — это размер контейнера).
Слайд 60

ИТОГ Если вам требуется быстрый отклик программы, то если возможно

ИТОГ

Если вам требуется быстрый отклик программы, то если возможно оперировать вектором либо массивом лучше использовать

именно их.
Если же время не стоит на первом месте, то можно им пренебречь и использовать map.
Слайд 61

Когда нужно использовать словари Подсчет числа каких-то объектов. В этом

Когда нужно использовать словари

Подсчет числа каких-то объектов. В этом случае нужно

завести словарь, в котором ключами являются объекты, а значениями — их количество.
Хранение каких-либо данных, связанных с объектом. Ключи — объекты, значения — связанные с ними данные. Например, если нужно по названию месяца определить его порядковый номер, то это можно сделать при помощи словаря
Num["January"] = 1;
Num["February"] = 2;
….
Установка соответствия между объектами (например, “родитель—потомок”). Ключ — объект, значение — соответствующий ему объект.
Слайд 62

Задание 1) Создайте программу «Страна – столица». 2) Создайте программу

Задание

1) Создайте программу «Страна – столица».
2) Создайте программу для определения по

названию месяца его порядкового номера.
3) Создайте программу в которой пользователь сможет использовать данные операции:
Добавлять новое слова — [английское — русское].
Удалять их.
Изменять значение уже существующего слова (...->second).
Имя файла: Библиотека-STL.-Тип-vector.pptx
Количество просмотров: 17
Количество скачиваний: 0