Содержание

Слайд 3

Что входит в STL

Контейнеры
Итераторы
Алгоритмы
Умные указатели, функторы...

Что входит в STL Контейнеры Итераторы Алгоритмы Умные указатели, функторы...

Слайд 4

Контейнер - массив

Контейнер - массив

Слайд 5

Контейнер - список

Контейнер - список

Слайд 6

Шаблоны алгоритмов

Шаблоны алгоритмов

Слайд 7

Итераторы

Указывают на элементы контейнеров
Обеспечивают доступ к элементам
Могут перемещаться от элемента к элементу
Их

Итераторы Указывают на элементы контейнеров Обеспечивают доступ к элементам Могут перемещаться от
можно сравнивать между собой
У каждого контейнера свой тип итераторов

Слайд 8

Итераторы бывают
Последовательные / произвольного доступа
Однонаправленные / двунаправленные
Прямые / обратные
Модифицирующие / только для

Итераторы бывают Последовательные / произвольного доступа Однонаправленные / двунаправленные Прямые / обратные
чтения
Особые итераторы для вставки элементов

Слайд 9

Синтаксис как у указателя

Iterator it1, it2;
it1->field; value = *it1; *it1 = value;

Синтаксис как у указателя Iterator it1, it2; it1->field; value = *it1; *it1

++it1; it1++; --it1; it1--; it1 += 3;
it1==it2; it1!=it2; it1>it2; it1

Слайд 10

Границы контейнеров

Границы контейнеров

Слайд 11

Границы контейнеров

Границы контейнеров

Слайд 12

Диапазон значений
[ a, b )

Диапазон значений [ a, b )

Слайд 13

Контейнеры бывают

Последовательные контейнеры: vector, array, deque, list, forward_list
Ассоциативные контейнеры: set, multiset, map, multimap, unordered_set,

Контейнеры бывают Последовательные контейнеры: vector, array, deque, list, forward_list Ассоциативные контейнеры: set,
unordered_map
Контейнеры - адаптеры: stack, queue, priority_queue

Слайд 14

У контейнера есть

Типы данных: iterator, const_iterator, reverse_iterator
Методы, возвращают итераторы: begin(), rbegin(), cbegin() end(), rend(), cend()
Методы,

У контейнера есть Типы данных: iterator, const_iterator, reverse_iterator Методы, возвращают итераторы: begin(),
возвращают размер: size(), empty(), capacity()

Слайд 15

У контейнера есть

Управление размером: clear (), resize(), reserve()
Вставка: push_back(), push_front(), insert()
Удаление: pop_back(), pop_front(), erase()

У контейнера есть Управление размером: clear (), resize(), reserve() Вставка: push_back(), push_front(),

Слайд 16

#include
#include
//using namespace std;
int main ( )
{
std::vector v

#include #include //using namespace std; int main ( ) { std::vector v
= {7, 5, 16, 8};
v.push_back(25);
v.push_back(13);
std::vector :: iterator it;
for ( it = v.begin(); it != v.end(); ++it )
{
std::cout << *it << '\n';
}
}

Слайд 17

#include
#include
//using namespace std;
int main ( )
{
std::vector v

#include #include //using namespace std; int main ( ) { std::vector v
= {7, 5, 16, 8};
v.push_back(25);
v.push_back(13);
for ( int n : v )
{
std::cout << n << '\n';
}
}

Слайд 18

#include
#include
//using namespace std;
int main ( )
{
std::vector v;

#include #include //using namespace std; int main ( ) { std::vector v;

v.resize(10);
for ( int i = 0; i < v.size(); ++i )
{
v[i] = 1.0 / i;
}
}

Слайд 19

#include
#include
class Info
{
std::string m_FIO;
double m_Mark;
public:
Info() : m_FIO(), m_Mark(0)

#include #include class Info { std::string m_FIO; double m_Mark; public: Info() :

{ std::cout << "Call: Info()" << std::endl; }
Info(const char* fio, double mark) : m_FIO(fio), m_Mark(mark)
{ std::cout << "Call: Info(fio,mark)" << std::endl; }
Info(const Info& obj ) : m_FIO(obj.m_FIO), m_Mark(obj.m_Mark)
{ std::cout << "Call: Info(Info&)" << std::endl; }
};

Слайд 20

Контейнер объектов
std::vector data;
//1)
Info object( "Иванов", 3.5 ); // Call: Info(fio,mark)
data.push_back( object ); //

Контейнер объектов std::vector data; //1) Info object( "Иванов", 3.5 ); // Call:
Call: Info(Info&)
//2)
data.emplace_back( "Петров", 4.3 ); // Call: Info(fio,mark)
//3)
data.reserve(10);
data.resize (2); // Call: Info(), Call: Info(Info&), Call: Info(Info&), Call: Info(Info&)

Слайд 21

Контейнер указателей
std::vector data;
//1)
data.push_back( new Info( "Иванов", 3.5 ) ); //Call: Info(fio,mark)
//2)
data.emplace_back( new

Контейнер указателей std::vector data; //1) data.push_back( new Info( "Иванов", 3.5 ) );
Info( "Петров", 4.5 ) ); // Call: Info(fio,mark)
//3)
data.reserve(10);
data.resize (2);

Контейнер указателей
std::vector data;
//1)
data.push_back( new Info( "Иванов", 3.5 ) ); //Call: Info(fio,mark)
//2)
data.emplace_back( new Info( "Петров", 4.5 ) ); // Call: Info(fio,mark)
//3)
data.reserve(10);
data.resize (2);

Слайд 22

Аллокация и реаллокация

Аллокация и реаллокация

Слайд 23

функторы

Функция (по имени)
Объект класса, с перегруженным оператором вызова функции ()
Лямбда выражение

функторы Функция (по имени) Объект класса, с перегруженным оператором вызова функции () Лямбда выражение

Слайд 24

функтор - функции

std::vector< std::string > text;
bool compareByLength ( const std::string& left, const

функтор - функции std::vector text; bool compareByLength ( const std::string& left, const
std::string& right)
{
return left.length() < rigth.length();
}
std::sort( text.begin(), text.end(), compareByLength );
std::sort( text.begin(), text.end(),
[](const std::string& left, const std::string& right)
{
return left.length() < rigth.length();
});

Слайд 25

функтор - объект класса

struct StringCompareByLength
{
bool operator() ( const std::string& left,
const std::string&

функтор - объект класса struct StringCompareByLength { bool operator() ( const std::string&
right ) const
{
return left.length() < rigth.length();
}
};
StringCompareByLength compare;
if( compare( "Котик", "Собачка" ) )
{
//мы сюда попадем, котик меньше собачки по длине слова
}
std::sort( text.begin(), text.end(), compare);

Слайд 26

Шаблон функтора Less

template
struct less
{
bool operator() ( const T& left, const

Шаблон функтора Less template struct less { bool operator() ( const T&
T& right ) const
{
return left < rigth;
}
};
std::less compare;
if( compare( "Котик", "Собачка" ) )
{
//снова сюда попадем, котик раньше собачки по алфавиту
}
std::sort( text.begin(), text.end() );

Слайд 27

std::set std::multiset

template<     class Key,     class Compare = std::less,     class Allocator = std::allocator
> class set;
#include
std::set cont1;
std::set< std::string, StringCompareByLength> cont2;

std::set std::multiset template , class Allocator = std::allocator > class set; #include std::set cont1; std::set cont2;

Слайд 28

класс - функтор

struct StringCompareByLength
{
bool operator() ( const std::string& left,
const std::string& right

класс - функтор struct StringCompareByLength { bool operator() ( const std::string& left,
) const
{
return left.length() < rigth.length();
}
};
StringCompareByLength compare;
std::sort( text.begin(), text.end(), compare);
std::sort( text.begin(), text.end(), StringCompareByLength() );
std::set< std::string, StringCompareByLength> cont2;

Слайд 29

std::set std::multiset

int count ( const Key& )
iterator find ( const Key& )
std::pair

std::set std::multiset int count ( const Key& ) iterator find ( const
iterator> equal_range ( const Key& )
iterator lower_bound ( const Key& )
iterator upper_bound ( const Key& )

Слайд 30

std::map std::multimap

template<     class Key, class T,     class Compare = std::less,     class Allocator = std::allocator >
> class map;
#include
std::map cont1;
std::map cont2;

std::map std::multimap template , class Allocator = std::allocator > > class map;

Слайд 31

std::map std::multimap

template< class T1, class T2 >
struct pair
{
T1 first;
T2 second;
};
template< class T1, class T2 >
std::pair

std::map std::multimap template struct pair { T1 first; T2 second; }; template
std::make_pair( T1 first, T2 second );

Слайд 32

std::map std::multimap

int count ( const Key& )
iterator find ( const Key& )
std::pair

std::map std::multimap int count ( const Key& ) iterator find ( const
iterator> equal_range ( const Key& )
iterator lower_bound ( const Key& )
iterator upper_bound ( const Key& )
Value operator[] ( const Key& key )