23
Хитрости STL контейнеров Хитрости STL контейнеров Максим Лысков Минск, 2016

tricks of Stl containers

Embed Size (px)

Citation preview

Хитрости STL контейнеров

Хитрости STL контейнеров

Максим Лысков

Минск, 2016

Хитрости STL контейнеров

Знакомимся?

Максим, старший инженер-разработчик в компании EPAM Systems.

В настоящее время участвую в разработке системы иерархического хранения и репликации данных.

Хитрости STL контейнеров

Хитрости STL контейнеров

Контейнер - последовательность

однотипных элементов.

Хитрости STL контейнеров

Типы контейнеров:● последовательные● ассоциативные● адаптеры контейнеров● “почти” контейнеры

Хитрости STL контейнеров

Последовательные контейнеры● template<class T, class Allocator = std::allocator<T>>

class vector;● template<class T, class Allocator = std::allocator<T>>

class list;● template<class T, class Allocator = std::allocator<T>>

class forward_list;● template<class T, class Allocator = std::allocator<T>>

class deque;

Хитрости STL контейнеров

Упорядоченые ассоциативные контейнеры● template<class Key, class Compare, class Allocator> class set;● template<class Key, class Compare, class Allocator> class

multi_set;● template<class Key, class T, class Compare, class Allocator>

class map;● template<class Key, class T, class Compare, class Allocator>

class multi_map;

Хитрости STL контейнеров

Неупорядоченые ассоциативные контейнеры● template<class Key, class Hash, class KeyEqual, class Allocator>

class unordered_set;● template<class Key, class Compare, class Allocator> class

unordered_multiset;● template<class Key, class T, class Hash, class KeyEqual,

class Allocator> class unordered_map;● template<class Key, class T, class Hash, class KeyEqual,

class Allocator> class unordered_multimap;

Хитрости STL контейнеров

Адаптеры контейнеров● template<class T, class Container> class stack;● template<class T, class Container> class queue;● template<class T, class Container, class Compare>

class priority_queue;

Хитрости STL контейнеров

Почти контейнеры● template<class T, std::size_t N> struct array;● T[N]● template<class C, class Traits, class Allocator> class

basic_string;● string, wstring, u16string, u32string● vector<bool>● template<std::size_t N> bitset;

Хитрости STL контейнеров

Типы внутри контейнера:● value_type● allocator_type● size_type● reference● pointer● ...

Хитрости STL контейнеров

Новое в операциях● конструирование из initializer_list● разница между vector<T>(n) и vector<T>{n} ● cbegin / cend● data● emplace / emplace_back / emplace_front● swap● shrink_to_fit

Хитрости STL контейнеров

Новое в операциях● movable constructors● move в push_*

Хитрости STL контейнеров

Сложность операций[] list front back

vector O(1) O(n)+ O(1)+

list O(1) O(1) O(1)

forward_list O(1) O(1)

deque O(1) O(n)+ O(1) O(1)

Хитрости STL контейнеров

Сложность операций[] list front back

map O(log(n)) O(log(n))

set O(log(n))

unordered_set O(1)

unordered_map O(1) O(1)

Хитрости STL контейнеров

Итераторы

Хитрости STL контейнеров

Классификация итераторов

Хитрости STL контейнеров

Новое в итераторах● begin/end● cbegin/cend● next/prev● move_iterator● make_move_iterator

Хитрости STL контейнеров

Алгоритмы - функции над последовательностями элементов.

Хитрости STL контейнеров

remove, remove_if, uniqueне изменяют размер последовательностиnew_end = remove_if(c.begin(), c.end(), pred);c.erase(new_end, c.end());

Хитрости STL контейнеров

Советы● не полагаться на оценки - измерять● выбирать контейнер исходя из операций● для ассоциативных - unordered_*, если не нужен порядок● по умолчанию использовать вектор ● …● PROFIT!

Хитрости STL контейнеров

?

Хитрости STL контейнеров

Спасибо!